zoukankan      html  css  js  c++  java
  • startService和binderService的混合使用时的生命周期

    创建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);
        }
    }
    

    1. startService ===>bindService ==>stopService ==>unbindService;

      stopService并没有调用Service中的任何方法,因为bindService还没有与MyService取消绑定
    2. bindService ==>startService ==>stopService ==>unbindService

      stop依旧没有调用Service中的方法;
    3. startService ==>bindService ==>unbindService ==>stopService

      到这一步我们可以知道,最后与Service解除绑定/停止服务的那个方法,才会执行onDestory,
    GitHub:https://github.com/godfunc
    博客园:http://www.cnblogs.com/godfunc
    Copyright ©2019 Godfunc
  • 相关阅读:
    HDU 1863 畅通project (最小生成树是否存在)
    经常使用MD5算法代码
    HDU 5045(Contest-费用流)[template:费用流]
    【c语言】统计一个数二进制中的1的个数
    git
    如何在阿里云服务器里配置iis 搭建web服务
    war包放入tomcat
    互联网推送服务原理:长连接+心跳机制(MQTT协议)
    保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护 3
    保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护 2
  • 原文地址:https://www.cnblogs.com/Godfunc/p/6553831.html
Copyright © 2011-2022 走看看