startService和binderService的混合使用时的生命周期

本文详细介绍了Android中Service的生命周期,包括MyService类的创建过程及其关键方法onCreate、onStartCommand、onDestroy等的调用时机。同时,通过MainActivity演示了如何使用startService和bindService来启动和绑定服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建MyService类

创建一个MyService类继承与Service:

public class MyService extends Service {
    @Override
    public void onCreate() {
        Log.i(getClass().getSimpleName(),"onCreate");
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(getClass().getSimpleName(),"onStartCommand");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        Log.i(getClass().getSimpleName(),"onDestory");
        super.onDestroy();
    }

    @Override
    public IBinder onBind(Intent intent) {
        Log.i(getClass().getSimpleName(),"onBind");
        return new MyBinder();
    }

    @Override
    public boolean onUnbind(Intent intent) {
        Log.i(getClass().getSimpleName(),"onUnbind");
        return super.onUnbind(intent);
    }

    public class MyBinder extends Binder{
        MyService getService(){
            return MyService.this;
        }
    }
}

绑定和开启MyService

startService和binderService:

public class MainActivity extends Activity implements View.OnClickListener {

    private ServiceConnection conn = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            myService = ((MyService.MyBinder)service).getService();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };
    private MyService myService;
    private Intent intent;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.btn1).setOnClickListener(this);
        findViewById(R.id.btn2).setOnClickListener(this);
        findViewById(R.id.btn3).setOnClickListener(this);
        findViewById(R.id.btn4).setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        intent = new Intent(MainActivity.this,MyService.class);
        switch (view.getId()) {
            case R.id.btn1:
                startService(intent);
                break;
            case R.id.btn2:
                bindService(intent,conn,BIND_AUTO_CREATE);
                break;
            case R.id.btn3:
                stopService(intent);
                break;
            case R.id.btn4:
                unbindService(conn);
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        stopService(intent);
        unbindService(conn);
    }
}

1023358-20170315132327932-659746293.png

  1. startService ===>bindService ==>stopService ==>unbindService;
    1023358-20170315132801182-402120625.png
    stopService并没有调用Service中的任何方法,因为bindService还没有与MyService取消绑定
  2. bindService ==>startService ==>stopService ==>unbindService
    1023358-20170315133302307-1268210387.png
    stop依旧没有调用Service中的方法;
  3. startService ==>bindService ==>unbindService ==>stopService
    1023358-20170315133909416-1220569680.png
    到这一步我们可以知道,最后与Service解除绑定/停止服务的那个方法,才会执行onDestory,

转载于:https://www.cnblogs.com/Godfunc/p/6553831.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值