前台进程:用户当前工作所需要的.一个进程如果满足下列任何条件就被认为是前台进程:
它正运行的是一个正在与用户交互的Activity(Activity对象的onResume方法已经被调用)
它寄宿了一个与用户交互的Activity绑定的服务
它有一个Service对象执行它的声明周期回调(onCreate,onStart,onDestory)
它有一个BroadcastReceiver对象执行它的onReceive方法
可视进程:他没有任何前台组件,但是仍然能影响用户在屏幕上看到东西.一个进程满足下面任何一个条件都被认为是可视进程
它寄宿着一个不是前台的activity,但是它对用户仍然课件(onPause方法已经被调用)
它寄宿着一个服务,这个服务绑定到了一个可视的activity
服务进程:它是一个运行着一个用startService方法启动的服务,并且该服务不在上面两种分类里,虽然服务进程可能跟用户可见的组件没有直接关系,但这些进程通常做用户关心的事(后台播放
或者下载数据等)
后台进程:一个保持着当前对用户不可视或被隐藏的activity(已经调用了Activity的onStop方法).这些进程没有直接影响用户的体验,并且可以在任何时候被停掉用来收回内存,来给
前三种进程提供运行空间,一般情况下有很多后台进程正在运行,因此他们保持在一个LRU(least recently used:最近最少使用),最近使用过最多的活动的进程会最后释放,如果一个
空进程:是一个没有保持活跃的应用程序组件的进程,保持这个进程可用的唯一原因是作为一个cache以提高下次启动组件的速度,系统进程会在系统资源缺乏的时候结束这些进程释放
资源
start方式开启服务的特点
1.Start方式开启服务 调用onCreate onStart
2.进入设置 应用里面可以看到服务正在运行 可以找到这个服务
3.在此startservice 会调用onStart 服务不会重新创建
4.进入设置应用界面 可以找到这个服务 通过点击停止服务
bind方式开启服务的特点
1.bind方式开启 执行 onCreate onbind
2.在模拟器中的应用中 不能找到这个服务 即这个服务是隐形的服务
3.Bind服务和activity就绑定在一起 如果activity退出 就会漏气 并且解除绑定
4.手动unbindservice(bind服务 只能执行一次)
5.Bind服务 不是在后台长期运行 生命周期很短 和activity 差不多
Bindservice调用服务里的方法
1.创建服务
2.开启服务BindService
3.在服务中 创建代理人对象 MyBind
4.在代理人对象中创建一个方法 调用服务里的方法
代理人对象里的方法要和服务里的方法参数和返回值要 一样
代理人对象里的方法名 不要和服务里的方法 名字重复
5.把代理人对象在onbind返回回去
6.在MyServiceConn中onServiceConnected可以接收到 返回的代理人对象
mainactivity里
//找到代理人
public void findBind(View v) {
Intent service = new Intent(MainActivity.this, BindService.class);
bindService(service, new MyServiceConn(), BIND_AUTO_CREATE);
Toast.makeText(MainActivity.this, "找到中间人", 0).show();
System.out.println("找到中间人");
}
//通过中间人找工作
public void findJob(View v) {
String name = et_name.getText().toString().trim();
int money = Integer.parseInt(et_money.getText().toString().trim());
mb.getWork(name, money);
//代理人的其他无关方法也可以被调用
mb.GodLike();
}
class MyServiceConn implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
System.out.println("正在打电话中...");
Toast.makeText(MainActivity.this, "正在打电话中...", 0).show();
mb = (MyBind) service;
}
//失败时走的方法
@Override
public void onServiceDisconnected(ComponentName name) {
System.out.println("中间人带着他的小姨子跑路辣");
}
}
在BindService中
@Override
public IBinder onBind(Intent intent) {
return new MyBind();
}
private class MyBind extends Binder implements IMyBind{
@Override
public void getWork(String name,int money) {
findWork(name,money);
}
public void GodLike() {
System.out.println("已超神");
}
}
public void findWork(String name,int money) {
if(money > 500) {
System.out.println("恭喜"+name+"获得这份工作");
Toast.makeText(BindService.this, "恭喜"+name+"获得这份工作", 0).show();
}else {
System.out.println("该职位目前申请人数过多,请"+name+"暂时不要投递简历");
Toast.makeText(BindService.this, "该职位目前申请人数过多,请"+name+"暂时不要投递简历", 0).show();
}
}