前言:
写这篇文章主要目的只是为了加深印象。由于工作的缘故,平时最多遇到的都是Activity。其他三大组件使用频率极少。
本文阅读要点提醒:
1、一个简单的service的例子,了解service生命周期;
2、activity与service的通信的两种方式:Intent,Binder;
3、service与activtiy的通信(或者activity监听service内部变化);
4、servcie的销毁几种情况及总结;
阅读声明:水平有限,主要针对普通玩家,快速查看某一点请直接通过目录,高端玩家随意。
正文:
一、写一个简单的service例子。
目的:阅读此部分主要为了解service的生命周期,可跳过。官方的生命周期图如下:
看图说话:
上图分左右两列,
1.左边这一列即是一个简单service的生命周期。
2.全图结合右边则是一个与activity有交互紧密关联的service的生命周期。
先看代码一个简单service
(一):一个简单activity用于启动service
package com.example.user.simpleservice;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void start(View view){
startService(new Intent(this,SimpleService.class));
}
public void stop(View view){
stopService(new Intent(this,SimpleService.class));
}
}
对应的activity_main:略。
(二):一个简单service
package com.example.user.simpleservice;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;
public class SimpleService extends Service {
private String TAG = getClass().getSimpleName();
public SimpleService() {
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG,TAG+"--onCreate");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG,TAG+"--onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.d(TAG,TAG+"--onDestroy");
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
}
对应的在manifeist中写:略。
操作后log如下:
点击按钮【启动service】:
11-26 01:14:47.010 1537-1537/com.example.user.simpleservice D/SimpleService: SimpleService--onCreate
11-26 01:14:47.014 1537-1537/com.example.user.simpleservice D/SimpleService: SimpleService--onStartCommand
再次点击【启动service】:
11-26 01:14:47.010 1537-1537/com.example.user.simpleservice D/SimpleService: SimpleService--onCreate
11-26 01:14:47.014 1537-1537/com.example.user.simpleservice D/SimpleService: SimpleService--onStartCommand
11-26 01:26:54.466 1537-1537/com.example.user.simpleservice D/SimpleService: SimpleService--onStartCommand
可见多打一条日志startCommand
点击按钮【停止service】:
11-26 01:14:47.010 1537-1537/com.example.user.simpleservice D/SimpleService: SimpleService--onCreate
11-26 01:14:47.014 1537-1537/com.example.user.simpleservice D/SimpleService: SimpleService--onStartCommand
11-26 01:26:54.466 1537-1537/com.example.user.simpleservice D/SimpleService: SimpleService--onStartCommand
11-26 01:28:38.034 1537-1537/com.example.user.simpleservice D/SimpleService: SimpleService--onDestroy
再次点击【停止service】:与上面Log并没有区别。确认已经销毁了。
由此左边的一列生命周期解释很清晰了。
二、写一个activity与service绑定的(Binder)service例子
所谓紧密关联:即可进行数据交互:Activity传递数据到Service,Service传递数据到Activity。
(1)Activity传递数据到Service包含两种:
1.一种是传统的Intent传递数据到service,另一种则是通过Binder进行传递数据到Service。
2.一种是传统的Intent传递数据到service的升级版本Demo:
一种是传统的Intent传递数据到service:
MainActivity.java:Activity两个按钮,一个启动service,一个销毁service。启动service时通过intent携带数据,传递给service。<