服务生命周期
oncreate -> onStartCommand -> onStart -> onDestroy
采用startService 的方法 开启的服务,服务一旦开启 是不会主动的停止掉的 除非调用StopService的方法 ,
或者来到程序管理界面把这个服务强制停止掉 服务才会被关闭。
服务进程如果被手工的杀死(进程管理器里面 linux kill) ,他会自动的重启起来,因为系统会认为这是一次异常(由于内存不足)的终止
当内存够用的时候会重新的把服务进程开启起来
如果服务已经被开启起来 多次调用startService()的方法 oncreate()方法不会被调用
服务只会被创建一次,一旦服务被创建了,oncreate()方法就不会再次被执行。
服务只会被停止一次 多次调用stopService()的方法 如果服务已经停止了 stopService的方法不会再次生效
内存不足的时候 系统回收服务所在进程之前 调用的方法 onLowMemory
很多业务场景, 需要在开启服务后 能够调用服务里面的方法
1.绑定到服务 获取到中间人
bindService(service, new MyConn(), Context.BIND_AUTO_CREATE);
2.当服务被成功绑定的时候 调用一个方法
onBind()返回一个IBinder对象
3创建一个Ibinder对象的实例MyBinder的类型
MyBinder实现IBinder的接口
并且里面有一个方法 能够间接地调用到call办事()
4.当服务被成功绑定的时候onServiceConnected()获取到myBinder对象
5.调用mybinder的call办事()
oncreate -> onStartCommand -> onStart -> onDestroy
采用startService 的方法 开启的服务,服务一旦开启 是不会主动的停止掉的 除非调用StopService的方法 ,
或者来到程序管理界面把这个服务强制停止掉 服务才会被关闭。
服务进程如果被手工的杀死(进程管理器里面 linux kill) ,他会自动的重启起来,因为系统会认为这是一次异常(由于内存不足)的终止
当内存够用的时候会重新的把服务进程开启起来
如果服务已经被开启起来 多次调用startService()的方法 oncreate()方法不会被调用
服务只会被创建一次,一旦服务被创建了,oncreate()方法就不会再次被执行。
服务只会被停止一次 多次调用stopService()的方法 如果服务已经停止了 stopService的方法不会再次生效
内存不足的时候 系统回收服务所在进程之前 调用的方法 onLowMemory
很多业务场景, 需要在开启服务后 能够调用服务里面的方法
1.绑定到服务 获取到中间人
bindService(service, new MyConn(), Context.BIND_AUTO_CREATE);
2.当服务被成功绑定的时候 调用一个方法
onBind()返回一个IBinder对象
3创建一个Ibinder对象的实例MyBinder的类型
MyBinder实现IBinder的接口
并且里面有一个方法 能够间接地调用到call办事()
4.当服务被成功绑定的时候onServiceConnected()获取到myBinder对象
5.调用mybinder的call办事()
package com.example.test;
public interface IService {
void callMethodInService(String name);
}
package com.example.test;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.widget.Toast;
public class TestService extends Service {
// 在绑定的时候调用的方法
@Override
public IBinder onBind(Intent intent) {
System.out.println("2.当服务被成功绑定的时候 调用一个方法 返回一个mybinder的对象");
MyBinder binder=new MyBinder();
System.out.println("服务的binder:"+binder.toString());
return binder;
}
/**
* 中间人只把自己想暴漏出来的方法公开 所以使用接口
* @author Administrator
*
*/
private class MyBinder extends Binder implements IService{
/**
* 中间人调用服务里面的方法
*
* @param name
*/
@Override
public void callMethodInService(String name) {
methodInService(name);
}
}
/**
* 服务里面的一个方法
* @param name
*/
public void methodInService(String name) {
Toast.makeText(this, "我是一个service方法,你好"+name, 0).show();
}
}
package com.example.test;
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;
public class MainActivity extends Activity {
private Intent service;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void start(View view){
service =new Intent(this,TestService.class);
startService(service);
}
public void stop(View view){
service = new Intent(this,TestService.class);
stopService(service);
}
//必须想办法得到服务的一个引用
public void call(View view){
//必须想办法 得到服务的一个引用
mybinder.callMethodInService("李四");
System.out.println("4.利用中间人调用服务里面的方法");
}
//通过绑定服务的方法 得到服务的中间人
public void bind(View view){
System.out.println("1.通过绑定服务的方式 得到服务的中间人");
bindService(service, new MyConn(), Context.BIND_AUTO_CREATE);
}
private IService mybinder;
private class MyConn implements ServiceConnection{
//当服务被连接上绑定成功的时候调用的方法。
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
System.out.println("3.当服务被成功绑定的时候activity得到的ibinder对象");
mybinder=(IService)service;
System.out.println("服务的binder:"+mybinder.toString());
}
//当服务失去连接的时候调用的方法
//一般都是服务异常终止的时候调用
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
}