Android基础知识—Service

Service是 Android 四大基本组件之一,是无界面的应用程序,可以长期在后台运行,在实际工作中非常重要,比如接收推送消息、在锁屏状态下侦听传感器信息。

1. 使用Service

新建工程 LearnService ,然后在源代码里边新建一个 Service(右键->New->Service),更改activity_main.xml:

activity_main.xml
修改布局: LinearLayout
布局走向: android:orientation="vertical"

在 MainActivity.java 添加两个事件监听器分别来启动服务和停止服务:

findViewById(R.id.btnStarService).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        startService(new Intent(MainActivity.this, MyService.class)); 
    }
});
findViewById(R.id.btnStopService).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        stopService(new Intent(MainActivity.this, MyService.class));
    }
});

运行后先去手机设置->开发者选项->正在运行的服务,发现没有。接着点击 starService,发现出现LearnService,点击 stopService 随即消失。

接着让它不断地在后台输出一段语句:
在 MyService.java 里面重写一个 onStarCommand,这个函数会在外界执行了 startService 的时候被执行。然后在里边创建一个线程来不断地运行输出语句:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    new Thread(){
        @Override
        public void run() {
            super.run();
    
            while(true) {
                System.out.println("服务正在运行...");
                try {
                    sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }.start();
    return super.onStartCommand(intent, flags, startId);
}

运行点击启动服务,可以看到控制台每隔一秒的输出。

2. 绑定Service

在 activity_main.xml 新添两个Button:

然后在 MainActivity.java 中添加两个监听器,但如果说,我们有多个按钮都要执行这个函数的话,我们可以把它们都写在一起:

private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    intent = new Intent(MainActivity.this, MyService.class);
    findViewById(R.id.btnStarService).setOnClickListener(this);
    findViewById(R.id.btnStopService).setOnClickListener(this);
    findViewById(R.id.btnBindService).setOnClickListener(this);
    findViewById(R.id.btnUnBindService).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
    case R.id.btnStarService:
        startService(intent);
        break;
    case R.id.btnStopService:
        stopService(intent);
        break;
    case R.id.btnBindService:
        bindService(intent, this, Context.BIND_AUTO_CREATE);
        break;
    case R.id.btnUnBindService:
        unbindService(this);
        break;
}
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
System.out.println("Service Connected");
}
@Override
public void onServiceDisconnected(ComponentName name) {

}

运行点击绑定出现错误,修改 MyService.java :

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

3. Service的生命周期

...

你可能感兴趣的:(Android基础知识—Service)