美文网首页Python精选
Android基础知识:Service(3)启动模式

Android基础知识:Service(3)启动模式

作者: JYangkai | 来源:发表于2018-12-28 22:53 被阅读45次

    废话

    今天我们来学习Service的启动模式

    Service的启动模式有两种
    startService
    bindService

    startService

    这种模式是启动Service后,Service就会一直运行下去,直到进程被杀死,Service在被启动后,就和启动它的context没有关系了,context不知道Service在干什么,当然,context还可以让它停止,它也可以自己停止

    下面就让我们启动一个Service

    先创建一个Service

    public class MyService extends Service {
        public MyService() {
        }
    
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            return super.onStartCommand(intent, flags, startId);
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
        }
    }
    

    然后在主界面通过一个按钮启动Service

    mBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent=new Intent(MainActivity.this,MyService.class);
            startService(intent);
        }
    });
    

    这样,Service就启动起来了

    我们可以让Service停止

    Intent intent=new Intent(MainActivity.this,MyService.class);
    stopService(intent);
    

    也可以在Service自己停止

    stopSelf();
    

    bindService

    这个方式启动的Service可以和启动它的context互动

    下面我们来看看如何用bind方式启动Service

    我们首先在Service中创建一个自定义的内部类并定义两个方法,然后在IBinder方法中返回自定义的内部类实例

    MyService.java

    public class MyService extends Service {
    
        private int mData=0;
    
        private MyBinder mMyBinder=new MyBinder();
    
        class MyBinder extends Binder{
    
            public void setData(int data){
                mData=data;
            }
    
            public int getData(){
                return mData;
            }
    
        }
    
        public MyService() {
        }
    
        @Override
        public IBinder onBind(Intent intent) {
            return mMyBinder;
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            return super.onStartCommand(intent, flags, startId);
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            stopSelf();
        }
    }
    

    接下来我们在MainActivity中进行如下修改

    public class MainActivity extends AppCompatActivity {
        
        private MyService.MyBinder myBinder;
        
        private ServiceConnection connection=new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
                myBinder=(MyService.MyBinder)iBinder;
                myBinder.setData(1);
                int data=myBinder.getData();
            }
    
            @Override
            public void onServiceDisconnected(ComponentName componentName) {
    
            }
        };
    
        private static final String TAG = MainActivity.class.getSimpleName();
    
        private Button mBtn;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Log.i(TAG, "onCreate");
            mBtn = (Button) findViewById(R.id.main_btn);
            mBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent=new Intent(MainActivity.this,MyService.class);
                    bindService(intent,connection,BIND_AUTO_CREATE);
                }
            });
        }
    }
    

    这样,我们就完成了Service的绑定

    我们也可以解除绑定

    unbindService(connection);
    

    今天的学习就到这里,晚安。

    相关文章

      网友评论

        本文标题:Android基础知识:Service(3)启动模式

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