Service生命周期的学习
来源:互联网 发布:机电软件 编辑:程序博客网 时间:2024/05/17 08:02
有两个方法使用service。
方法1是使用Context.startService()会启动service,如果service没有创建,首先会调用onCreate()方法,然后调用onStartCommand(Intent,int,int)方法,service会一直存在直到stopService()或stopSelf()调用。方法2是使用Context.bindService(),如果service没有创建,首先也会调用onCreate()方法,但是如果已经创建则会调用onBind(Intent)方法返回客户端一个IBinder接口。
未调用stopService来停止服务,这个服务就会随着Android系统的启动而启动,随着Android系统的关闭而关闭。也就是服务会在Android系统启动后一直在后台运行,直到Android系统关闭后服务才停止。但有时我们希望在启动服务的Activity关闭后服务自动关闭,这就需要将Activity和Service绑定。
关闭应用程序后,会看到在Sysout视图中输出了onUnbind和onDestroy信息,表明在关闭Activity后,服务先被解除绑定,最后被销毁。
如果先启动(调用startService方法)一个服务,然后再绑定(调用bindService方法)服务,会怎么样呢?在这种情况下,虽然服务仍然会成功绑定到Activity上,但在Activity关闭后,服务虽然会被解除绑定,但并不会被销毁,也就是说,MyService类的onDestroy方法不会被调用。
activity
package com.zeph.android.services;import android.app.Activity;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class ServicesActivity extends Activity {private Button myButton;private Button myButton2;private Button myButton3;private Button myButton4;private ServiceConnection conn;private MyService service;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);conn = new ServiceConnection() {// 连接服务失败后,该方法被调用@Overridepublic void onServiceDisconnected(ComponentName name) {System.out.println("ServiceConnection Disconnected");Toast.makeText(getApplicationContext(),"ServiceConnection Disconnected", Toast.LENGTH_LONG).show();service = null;}// 成功连接服务后,该方法被调用。@Overridepublic void onServiceConnected(ComponentName name, IBinder ibinder) {System.out.println("ServiceConnection Connected");Toast.makeText(getApplicationContext(),"ServiceConnection Connected", Toast.LENGTH_LONG).show();service = ((MyService.MyBinder) ibinder).getMyService();}};myButton = (Button) findViewById(R.id.myButton);myButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {Intent intent = new Intent();intent.setClass(getApplicationContext(), MyService.class);startService(intent);Toast.makeText(getApplicationContext(), "启动一个Service",Toast.LENGTH_LONG).show();}});myButton2 = (Button) findViewById(R.id.myButton2);myButton2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setClass(getApplicationContext(), MyService.class);stopService(intent);Toast.makeText(getApplicationContext(), "关闭一个Service",Toast.LENGTH_LONG).show();}});myButton3 = (Button) findViewById(R.id.myButton3);myButton3.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {Intent intent = new Intent();intent.setClass(getApplicationContext(), MyService.class);bindService(intent, conn, Context.BIND_AUTO_CREATE);Toast.makeText(getApplicationContext(), "绑定一个Service",Toast.LENGTH_LONG).show();System.out.println("绑定一个Service");}});myButton4 = (Button) findViewById(R.id.myButton4);myButton4.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {unbindService(conn);Toast.makeText(getApplicationContext(), "取消绑定一个Service",Toast.LENGTH_LONG).show();System.out.println("取消绑定一个Service");}});}}service
package com.zeph.android.services;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;public class MyService extends Service {private MyBinder binder = new MyBinder();@Overridepublic IBinder onBind(Intent intent) {System.out.println("onBind");return binder;}@Overridepublic void onCreate() {super.onCreate();System.out.println("onCreate");}@Overridepublic void onDestroy() {super.onDestroy();System.out.println("onDestroy");}@Overridepublic void onRebind(Intent intent) {super.onRebind(intent);System.out.println("onRebind");}@Overridepublic void onStart(Intent intent, int startId) {super.onStart(intent, startId);System.out.println("onStart");}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {System.out.println("onStartCommand");return super.onStartCommand(intent, flags, startId);}@Overridepublic boolean onUnbind(Intent intent) {System.out.println("onUnbind");return super.onUnbind(intent);}public class MyBinder extends Binder {MyService getMyService() {return MyService.this;}}}
账号被冻结了,今天才找回来,以前的邮箱不记得了。。。CSDN这次真是遇到了麻烦!!!
- Service生命周期的学习
- 40-Service学习第一发Service的生命周期
- Service 的生命周期
- service的生命周期
- Service的生命周期
- Service 的生命周期
- Service 的生命周期
- Service的生命周期!!!
- Service的生命周期
- service的生命周期
- Android Service的生命周期
- Android 的Service生命周期
- Android Service 的生命周期
- service的生命周期
- Service的生命周期
- Service的生命周期
- Service的生命周期
- service的生命周期
- 嵌入式DSP音频处理器控制软件
- 利用批处理获取无重复的数据
- 提取字段的某一部分值
- 风影墙纸,一天看N回。
- 基础总结篇之九:Intent应用详解
- Service生命周期的学习
- 微软MSChart图表插件使用
- 谈谈jetty8 的io模型
- make 中的函数
- HDU2294 Pendant 矩阵应用
- JAVA类的基本应用
- 深入理解JAVA中的栈与堆
- JAVA类的基本应用2
- HDU3732多重背包