Python精选

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

2018-12-28  本文已影响45人  JYangkai

废话

今天我们来学习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);

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

上一篇 下一篇

猜你喜欢

热点阅读