Android 四大组件学习之Service四

本节学习Service的生命周期。 既然Activity有生命周期,那同理Service也有自己的生命周期。

和学习Activity一样,我们先贴出Google官网给Service下的定义,以及生命周期图

从图中可以看到,左面一路下来是我们第二节课中说的用StartServer启动服务的流程。右面一路下来的是第三节中说的用BindService启动服务的流程。

在上两节中都看到了如何启动服务,同时销毁服务。既然这年代是混搭的年代,那当然也需要这两种服务混搭起来使用。

先来看看MyActivity的代码:

public class MyActivity extends Activity {private Button btn_start;private Button btn_end;private Button btn_bind;private Button btn_unbind;private MyServiceConnection sConnection;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_myservice);btn_start = (Button)findViewById(R.id.button1);btn_end = (Button)findViewById(R.id.button2);btn_bind = (Button)findViewById(R.id.button3);btn_unbind = (Button)findViewById(R.id.button4);btn_start.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// 启动服务Intent intent = new Intent(MyActivity.this, MyService.class);startService(intent);Log.i("MyActivity", "创建服务按钮被按下!");}});btn_end.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// 销毁服务Intent intent = new Intent(MyActivity.this, MyService.class);stopService(intent);Log.i("MyActivity", "销毁服务按钮被按下!");}});btn_bind.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// 启动服务Intent intent = new Intent(MyActivity.this, MyService.class);Log.i("MyActivity", "绑定服务按钮被按下!");bindService(intent, sConnection, Service.BIND_AUTO_CREATE);}});btn_unbind.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// 启动服务Intent intent = new Intent(MyActivity.this, MyService.class);Log.i("MyActivity", "解绑服务按钮被按下!");unbindService(sConnection);}});}public class MyServiceConnection implements ServiceConnection{@Override//当连接服务成功后调用public void onServiceConnected(ComponentName arg0, IBinder arg1) {// TODO Auto-generated method stubLog.i("MyActivity", "onServiceConnected");}@Override//当server所在的进程由于异常终止或者其他原因终止调用public void onServiceDisconnected(ComponentName arg0) {// TODO Auto-generated method stubLog.i("MyActivity", "onServiceDisconnected");}}}MyService的代码:(和上节的MyService代码是样的)public class MyService extends Service {private MyThread thread;private boolean stopFlag = false;@Override//必须实现的方法public IBinder onBind(Intent arg0) {// TODO Auto-generated method stub//服务运行后,启动线程if(!stopFlag){thread.start();thread.setFlag(true);}Log.i("MyService", "onBind————");return null;}@Override//被创建时的调用public void onCreate() {// TODO Auto-generated method stub//服务创建时,实例化MyThreadthread = new MyThread();Log.i("MyService", "onCreate————");super.onCreate();}@Override@Deprecated//OnStart方法现在被OnStartCommd已经取代,其实在OnStartCommand也调用了OnStartpublic void onStart(Intent intent, int startId) {// TODO Auto-generated method stubsuper.onStart(intent, startId);Log.i("MyService", "onStart————");}@Override//启动时会调用public int onStartCommand(Intent intent, int flags, int startId) {// TODO Auto-generated method stubLog.i("MyService", "onStartCommand————");//服务运行后,启动线程if(!stopFlag){thread.start();thread.setFlag(true);}return super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {// TODO Auto-generated method stub//服务销毁时,停止线程任务thread.setFlag(false);Log.i("MyService", "onDestroy————");super.onDestroy();}@Overridepublic boolean onUnbind(Intent intent) {// TODO Auto-generated method stubLog.i("MyService", "onUnbind————");return super.onUnbind(intent);}class MyThread extends Thread{//设置flagpublic void setFlag(Boolean flag){stopFlag = flag;}@Overridepublic void run() {super.run();while(stopFlag){//设置时间的输出方式SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String time = format.format(new Date());//显示时间Log.i("MyService", time);try {//延迟一秒Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

那既然要学习两者混搭,那就看有几种混搭的方式:

1: 用StartServer启动服务,然后再去用BindService绑定服务

有理想在的地方,地狱就是天堂

Android 四大组件学习之Service四

相关文章:

你感兴趣的文章:

标签云: