安卓四大组件之--service
2015-01-28 16:49
218 查看
服务:长期后台运行的没有界面的activity,程序写法和activity类似。
安卓系统进程管理是按照一定规则的:
1.默认情况下,关闭掉一个应用程序,清空了这个应用程序的任务栈,应用程序的进程还会保留。因为手机内存较小,方便下次快速启动应用程序,但是也会带来内存不足的问题。
2.安卓系统有一套内存清理机制,按照优先级去回收系统的内存。
进程分为5个等级的优先级:(从高到低)
1.Foreground process 前台进程 用户正在玩的应用进程
2.Visible process 可视进程 用户仍然可以看到这个进程的界面
3.Service process服务进程 应用程序有一个组件在后台运行
4.Backgroundprocess 后台进程 应用程序没有服务在运行,并且最小化(activity onstop)
5.Empty process 空进程 没有任何运行的activity ,任务栈空了
线程是运行在进程里的,当一个应用程序按返回键后,任务栈被清空,变成一个空进程,很容易被回收,里面的子线程也停止了。因此如果有需要长期后台运行的组件,不要在activity 开启子线程,应该创建服务,在服务里面开启子线程,这样优先级就变高了。
服务的目的:
1.长期后台运行。
2.提高进程的优先级,系统不容易回收掉进程,即便回收了,内存充足的时候,会把进程重新创建。
由于服务没有界面,因此生命周期也更简单,只有onCreat() onStartCommand() onDestroy()三个方法。
服务的生命周期:
一、采用start的方式开启服务
生命周期如下:
onStart()过时了
开启服务: onCreate()--> onStartCommand() ---> onDestory();
如果服务已经开启,不会重复的执行onCreate(), 而是会调用onStart()和 onStartCommand();
服务停止的时候 onDestory().
服务只会被停止一次
二、服务还有一种开启方式,绑定的方式开启服务。
onCreate() --->onBind();--->onunbind()-->onDestory();
绑定服务不会调用onstart或者onstartcommand方法;
混合调用的服务的生命周期:
服务长期后台运行,又想调用服务的方法:
1.start方式开启服务(保证服务长期后台运行)
2.bind方式绑定服务(保证调用服务的方法)
3.unbind解除绑定服务
4.stopService停止服务。
三、两种开启服务方法的区别。
start方式开启服务。 一旦服务开启跟调用者(开启者)就没有任何关系了。
开启者退出了,开启者挂了,服务还在后台长期的运行。
开启者没有办法去调用服务里面的方法。(美国的司法独立)不能通过new一个service来调用service里面的方法,只能通过系统框架(activity)开启service。
bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。不求同时生,但求同时死。
开启者可以调用服务里面的方法。
bind方式绑定服务过程如下:
1.新建一个sevice类,里面建立一个内部类A继承Binder,包含调用service里面方法的方法。
2.利用service里面的onBind方法返回1中的内部类A对象。
3.在activity的bind方法中采用绑定的方式去开启服务,
Intent intent = new Intent(this,MyService.class);
conn = new MyConn();
bindService(intent, conn, BIND_AUTO_CREATE);
conn为4中的类的对象。
4.写一个类继承ServiceConnection类,里面实现onServiceConnected方法(方法中需要获取A对象),还需要实现onServiceDisconnected方法。
5.利用4中的A的对象调用服务里面的方法。
安卓系统进程管理是按照一定规则的:
1.默认情况下,关闭掉一个应用程序,清空了这个应用程序的任务栈,应用程序的进程还会保留。因为手机内存较小,方便下次快速启动应用程序,但是也会带来内存不足的问题。
2.安卓系统有一套内存清理机制,按照优先级去回收系统的内存。
进程分为5个等级的优先级:(从高到低)
1.Foreground process 前台进程 用户正在玩的应用进程
2.Visible process 可视进程 用户仍然可以看到这个进程的界面
3.Service process服务进程 应用程序有一个组件在后台运行
4.Backgroundprocess 后台进程 应用程序没有服务在运行,并且最小化(activity onstop)
5.Empty process 空进程 没有任何运行的activity ,任务栈空了
线程是运行在进程里的,当一个应用程序按返回键后,任务栈被清空,变成一个空进程,很容易被回收,里面的子线程也停止了。因此如果有需要长期后台运行的组件,不要在activity 开启子线程,应该创建服务,在服务里面开启子线程,这样优先级就变高了。
服务的目的:
1.长期后台运行。
2.提高进程的优先级,系统不容易回收掉进程,即便回收了,内存充足的时候,会把进程重新创建。
由于服务没有界面,因此生命周期也更简单,只有onCreat() onStartCommand() onDestroy()三个方法。
服务的生命周期:
一、采用start的方式开启服务
生命周期如下:
onStart()过时了
开启服务: onCreate()--> onStartCommand() ---> onDestory();
如果服务已经开启,不会重复的执行onCreate(), 而是会调用onStart()和 onStartCommand();
服务停止的时候 onDestory().
服务只会被停止一次
二、服务还有一种开启方式,绑定的方式开启服务。
onCreate() --->onBind();--->onunbind()-->onDestory();
绑定服务不会调用onstart或者onstartcommand方法;
混合调用的服务的生命周期:
服务长期后台运行,又想调用服务的方法:
1.start方式开启服务(保证服务长期后台运行)
2.bind方式绑定服务(保证调用服务的方法)
3.unbind解除绑定服务
4.stopService停止服务。
三、两种开启服务方法的区别。
start方式开启服务。 一旦服务开启跟调用者(开启者)就没有任何关系了。
开启者退出了,开启者挂了,服务还在后台长期的运行。
开启者没有办法去调用服务里面的方法。(美国的司法独立)不能通过new一个service来调用service里面的方法,只能通过系统框架(activity)开启service。
bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。不求同时生,但求同时死。
开启者可以调用服务里面的方法。
bind方式绑定服务过程如下:
1.新建一个sevice类,里面建立一个内部类A继承Binder,包含调用service里面方法的方法。
2.利用service里面的onBind方法返回1中的内部类A对象。
3.在activity的bind方法中采用绑定的方式去开启服务,
Intent intent = new Intent(this,MyService.class);
conn = new MyConn();
bindService(intent, conn, BIND_AUTO_CREATE);
conn为4中的类的对象。
4.写一个类继承ServiceConnection类,里面实现onServiceConnected方法(方法中需要获取A对象),还需要实现onServiceDisconnected方法。
5.利用4中的A的对象调用服务里面的方法。
相关文章推荐
- 安卓四大组件之----service
- 安卓四大组件之Service
- 安卓四大组件总结之service
- 安卓基础第八天(四大组件之Service,AIDL)
- 安卓中的四大组件_Service
- 安卓四大组件之Service
- 安卓四大组件的作用、安卓Service的作用
- 安卓四大组件之一service
- 安卓四大组件之三Service
- 安卓四大组件之二#1-Service的创建,生命周期以及动态调用Service里的方法 推荐
- 安卓四大组件之Service
- 安卓入门--四大组件--Service基本用法
- 安卓四大组件——Service(服务)
- 安卓四大组件之service
- 安卓四大组件之二#2-使用AIDL技术实现动态调用其他app中的Service的方法
- 安卓入门--四大组件--Service高级用法
- 0909Android基础安卓四大组件之Service
- 安卓四大组件之service服务
- 【XFeng安卓开发笔记】四大基本组件——跨应用启动service
- 安卓四大组件-Service服务