基于Android Service 生命周期的详细介绍
基于Android Service 生命周期的详细介绍
发布时间:2016-12-28 来源:查字典编辑
摘要:Service概念及用途:Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们...

Service概念及用途:

Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行,那我们什么时候会用到Service呢?比如我们播放音乐的时候,有可能想边听音乐边干些其他事情,当我们退出播放音乐的应用,如果不用Service,我们就听不到歌了,所以这时候就得用到Service了,又比如当我们一个应用的数据是通过网络获取的,不同时间(一段时间)的数据是不同的这时候我们可以用Service在后台定时更新,而不用每打开应用的时候在去获取。

Service生命周期:

Android Service的生命周期并不像Activity那么复杂,它只继承了onCreate(),onStart(),onDestroy()三个方法,当我们第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法。

Service与Activity通信:

Service后端的数据最终还是要呈现在前端Activity之上的,因为启动Service时,系统会重新开启一个新的进程,这就涉及到不同进程间通信的问题了(AIDL),当我们想获取启动的Service实例时,我们可以用到bindService和unBindService方法,它们分别执行了Service中IBinder()和onUnbind()方法。

1、添加一个类,在MainActivity所在包之下

复制代码 代码如下:

public class LService extends Service {

private static final String TAG = "LService";

@Override

public IBinder onBind(Intent intent) {

Log.i(TAG, "onbind");

return null;

}

@Override

public void onCreate() {

Log.i(TAG, "oncreate");

super.onCreate();

}

@Override

public void onStart(Intent intent, int startId) {

Log.i(TAG, "onstart");

super.onStart(intent, startId);

}

@Override

public void onDestroy() {

Log.i(TAG, "ondestoty");

super.onDestroy();

}

@Override

public boolean onUnbind(Intent intent) {

Log.i(TAG, "onubind");

return super.onUnbind(intent);

}

public String getSystemTime() {

Time t = new Time();

t.setToNow();

return t.toString();

}

public class LBinder extends Binder {

LService getService() {

return LService.this;

}

}

}

2、在程序界面文件中添加控件

复制代码 代码如下:

<TextView

android:id="@+id/text"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="wecclome to Livingstone's bolg" />

<Button

android:id="@+id/startservice"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="startService" />

<Button

android:id="@+id/stopservice"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="stopService" />

<Button

android:id="@+id/bindservice"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="bindService" />

<Button

android:id="@+id/unbindservice"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="unbindService" />

3、修改MainActivity中的方法,以及让MainActivity类实现OnClickListener接口

复制代码 代码如下:

public class MainActivity extends Activity implements OnClickListener {

private LService mLService;

private TextView mTextView;

private Button startServiceButton;

private Button stopServiceButton;

private Button bindServiceButton;

private Button unbindServiceButton;

private Context mContext;

// 这里需要用到ServiceConnection,在Context.bindService和context.unBindService()里用到

private ServiceConnection mServiceConnection = new ServiceConnection() {

// 当bindService时,让TextView显示LService里getSystemTime()方法的返回值

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

mLService = ((LService.LBinder) service).getService();

mTextView.setText("I am from Service :" + mLService.getSystemTime());

}

public void onServiceDisconnected(ComponentName name) {

}

};

public void setupViews() {

mContext = MainActivity.this;

mTextView = (TextView) findViewById(R.id.text);

startServiceButton = (Button) findViewById(R.id.startservice);

stopServiceButton = (Button) findViewById(R.id.stopservice);

bindServiceButton = (Button) findViewById(R.id.bindservice);

unbindServiceButton = (Button) findViewById(R.id.unbindservice);

startServiceButton.setOnClickListener(this);

stopServiceButton.setOnClickListener(this);

bindServiceButton.setOnClickListener(this);

unbindServiceButton.setOnClickListener(this);

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

setupViews();

}

@Override

public void onClick(View v) {

if (v == startServiceButton) {

Intent i = new Intent(MainActivity.this, LService.class);

mContext.startService(i);

} else if (v == stopServiceButton) {

Intent i = new Intent(MainActivity.this, LService.class);

mContext.stopService(i);

} else if (v == bindServiceButton) {

Intent i = new Intent(MainActivity.this, LService.class);

mContext.bindService(i, mServiceConnection, BIND_AUTO_CREATE);

} else {

mContext.unbindService(mServiceConnection);

}

}

}

4、注册Service

<service

android:name=".LService"

android:exported="true" >

</service>

5、运行程序

基于Android Service 生命周期的详细介绍1程序界面

点击startService基于Android Service 生命周期的详细介绍2此时调用程序设置里面可以看到Running Service有一个LService

点击stopService基于Android Service 生命周期的详细介绍3

点击bindService基于Android Service 生命周期的详细介绍4此时Service已经被关闭

点击unbindService基于Android Service 生命周期的详细介绍5

先点击startService,再依次点击bindService和unbindService

基于Android Service 生命周期的详细介绍6

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新安卓软件开发学习
热门安卓软件开发学习
编程开发子分类