业务

作者: 夜雨聲煩_ | 来源:发表于2018-11-29 13:48 被阅读0次

Service

后台执行耗时操作,例如音乐。如果使用Activity来播放音乐,可能会在程序切换或者页面消失时停止,但是使用Service则不会。

与thread的区别

service:长时间执行,不与用户发生交互
thread: 需要进行交互。如某个Acitvity的背景音乐。

使用

startService() 调用者与被调用者没有联系,就算调用者消失,service也会继续。
bindService() 调用者与被调用绑定关系,调用者消失service就会停止。

startService
public class ExampleService extends Service {

    private static final String TAG = "ExampleService";

    //    @androidx.annotation.Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.i(TAG,"creat");
    }


    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i(TAG,"destroy");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(TAG,"start");
        return super.onStartCommand(intent, flags, startId);
    }
}
private View.OnClickListener listener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.startButton:
                Intent startIntent = new Intent(MainActivity.this, ExampleService.class);
                startService(startIntent);
                break;
            case R.id.stopButton:
                Intent stopIntent = new Intent(MainActivity.this, ExampleService.class);
                stopService(stopIntent);
                break;
            default:
                break;
        }
    }
}
bindService
public class BinderService extends Service {

    private static final String TAG = "BinderService";
    private Mybinder binder = new Mybinder();

    public void myMethod() {
        Log.i(TAG, "my method");
    }

    public class Mybinder extends Binder {
        public BinderService getService(){
            return BinderService.this;
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        return binder;
    }

}
private View.OnClickListener listener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.startBinderService:
                bindMyService();
                break;
            case R.id.stopBinderService:
                unbindMyService();
                break;
            default:
                break;
        }
    }

    private ServiceConnection conn = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            BinderService.Mybinder binder = (BinderService.Mybinder)service;
            BinderService myService = binder.getService();
            myService.myMethod();
            isConnected = true;
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            isConnected = false;
        }
    };

    private void bindMyService() {
        Intent intent = new Intent(BinderActivity.this, BinderService.class);
        bindService(intent, conn , Context.BIND_AUTO_CREATE);

    }

    private void unbindMyService() {

        if (isConnected) {
            Log.i(TAG, "unbind method");
            unbindService(conn);
        }
    }
};
线程问题

service会占用主线程,如果进行耗时操作会卡线程,所以要使用多线程。多线程的使用方法如下。

private class MyThread extends Thread {
    @Override
    public void run() {
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
//调用
new MyThread().start();

IntentService

区别于serviceIntentService是异步,不需要自己创建线程。

public class ExampleIntentService extends IntentService {

    /**
     * Creates an IntentService.  Invoked by your subclass's constructor.
     *
     * @param name Used to name the worker thread, important only for debugging.
     */
    public ExampleIntentService() {
        super("ExampleIntentService");
    }

    @Override

    protected void onHandleIntent(Intent intent) {
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

相关文章

  • 业务

    最近一直在找注塑开模的供应商,上周联系了几家发生了很多有趣的事情。 1)上周四我打电话询问报价,一个中年男人的声音...

  • 业务

    我是刘随洲。 差不多一年多没有冒泡,像消失了一样,其实不是。生活实在不易。辗转几次最后还是觉得要多做点事。 我以前...

  • 业务

    今天有个以前的同事说他负责的某个项目要招投标,问我有没有相关的单位推荐,刚好我认识几个在这方面比较不错的,便...

  • 业务

    聪明的人是用勤奋来证明自己,而自认为聪明的人是在一直算计着别人! 大道至简把问题看简单自然而然就没有那么复杂,曾...

  • 业务

     爆品: 一般不是 自己店的。这个系统,全网推荐。供商家 参考 {没上架,让他上架, (有 ID, 就是上了架...

  • 业务

    如逆水行舟,不进则退 感觉自己太懦弱,当你的能力背负不起野心的时候,要沉淀,不要被别人影响到,加油

  • 业务

    1.我们属于端内业务2.POI详情页为搜索线,剩下的是基础地图&生活服务线。

  • 业务

    今天为了做培训计划,预约了市场部和商务部两个部门,之前在我脑袋里一直觉得销售是包含全部的,今天才知道完全不是这样。...

  • 业务

    Service 后台执行耗时操作,例如音乐。如果使用Activity来播放音乐,可能会在程序切换或者页面消失时停止...

  • 业务

    最近打电话咨询聚合支付的较多,现统一回复一下:目前我行聚合支付限额:单笔5000元,日累计、月累计均为5万元,有营...

网友评论

      本文标题:业务

      本文链接:https://www.haomeiwen.com/subject/bgegqqtx.html