进程的优先级&为什么使用服务

来源:互联网 发布:js常用正则表达式 编辑:程序博客网 时间:2024/06/06 06:44

1.      服务: 长期后台运行的没有界面的组件

2.      不容易被回收掉,即使因内存不足回收,也会在内存充足时创建

3.      android应用:什么地方需要用到服务?

         天气预报:后台的连接服务器的逻辑,每隔一段时间 获取最新的天气信息

         股票显示:后台的连接服务器的逻辑,每隔一段时间 获取最新的股票信息

          mp3播放器: 后台长期的播放音乐。

3.  android系统进程管理是按照一定的规则的:

        1.应用程序一旦被打开 通常情况下关闭(清空任务栈)后进程不会停止。方便

        下一次快速启动。带来内存不足的问题。

        2.Android系统有一套 内存清理机制。 按照优先级去回收系统的内存。

4.  进程分为5个等级的优先级:(从高到低)

       1.Foreground process 前台进程  用户正在玩的应用程序对应的进程

       2.Visible process 可视进程      用户仍然可以看到这个进程的界面。

       3.Service process服务进程      应用程序有一个服务组件在后台运行。

       4.Background process 后台进程  应用程序没有服务在运行 并且最小化 (activity onstop)

       5.Empty process 空进程        没有任何运行的activity, 任务栈空了

1.      使用子线程在后台工作,如果程序关闭,就会清空任务栈,该进程变成空进程,如果手机内存不足,安卓系统会清掉线程。

2.      长期后台运行的组件, 不要在activity开启子线程,应该是创建服务,在服务里面开启子线程。

3.  服务的目的:

          1.长期后台运行。

          2.提高进程的优先级,系统不容易回收掉进程,即便回收了,内存充足的时候,把进程重新创建。


例子代码

配置文件:

<service android:name="com.itheima.testservice.MyService"/>

新建服务类:

public class MyService extends Service {@Overridepublic IBinder onBind(Intent intent) {return null;}//oncreate ondestory onstart onstop onresume onpause//服务没有界面         //服务只会创建一次@Overridepublic void onCreate() {System.out.println("服务创建了");super.onCreate();}//可以开启多次@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {System.out.println("服务接收到了开启指令");return super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {// TODO Auto-generated method stubSystem.out.println("服务销毁了");super.onDestroy();}}


开启服务:

public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void click(View view){Intent intent = new Intent(this,MyService.class);startService(intent);}}


0 0
原创粉丝点击