进程优先级优化(避免休眠的时候进程被KILL,主要面向service)(笔记)

来源:互联网 发布:炉石传说友谊赛淘宝 编辑:程序博客网 时间:2024/05/21 04:22

进程等级分类

进程(process)的优先级(从高到低):

1. 前台进程 Foreground process

  1) 当前用户操作的Activity所在进程

  2) 绑定了当前用户操作的Activity的Service所在进程  

  3) 调用了startForeground()的Service

     典型场景:后台播放音乐

 

<1>提高Service优先级的方法:

在Service中调用startFroeground(int id, Notification notify)      

 

<2>恢复Service优先级的方法:

在Service中调用stopFroeground(boolean removeNotify)

 

2. 可见进程Visible process

  1) 处于暂停状态的Activity

  2) 绑定到暂停状态的Activity的Service

 

3. 服务进程Service process  

  通过startService()启动的Service

 

4. 后台进程Background process  

  1) 处于停止状态的Activity

 

5. 空进程Empty process  


关于优化 :startForeground

优化方案:

                Service启动(比如:onStartCommand)的时候,调用startForeground让服务前台运行 —— 前台进程,提高进程优先级

                Service结束(比如:onDestroy)的时候,调用stopForeground —— 恢复进程等级。


android官方描述:

Running a Service in the Foreground


A foreground service is a service that's considered to be something the user is actively aware of and thus not a candidate for the system to kill when low on memory. A foreground service must provide a notification for the status bar, which is placed under the "Ongoing" heading, which means that the notification cannot be dismissed unless the service is either stopped or removed from the foreground.

For example, a music player that plays music from a service should be set to run in the foreground, because the user is explicitly aware of its operation. The notification in the status bar might indicate the current song and allow the user to launch an activity to interact with the music player.

To request that your service run in the foreground, call startForeground(). This method takes two parameters: an integer that uniquely identifies the notification and the Notification for the status bar. For example:

<span class="typ" style="color:#66066;">Notification</span><span class="pln" style="color:#000000;"> notification </span><span class="pun" style="color:#66660;">=</span><span class="pln" style="color:#000000;"> </span><span class="kwd" style="color:#0088;">new</span><span class="pln" style="color:#000000;"> </span><span class="typ" style="color:#66066;">Notification</span><span class="pun" style="color:#66660;">(</span><span class="pln" style="color:#000000;">R</span><span class="pun" style="color:#66660;">.</span><span class="pln" style="color:#000000;">drawable</span><span class="pun" style="color:#66660;">.</span><span class="pln" style="color:#000000;">icon</span><span class="pun" style="color:#66660;">,</span><span class="pln" style="color:#000000;"> getText</span><span class="pun" style="color:#66660;">(</span><span class="pln" style="color:#000000;">R</span><span class="pun" style="color:#66660;">.</span><span class="kwd" style="color:#0088;">string</span><span class="pun" style="color:#66660;">.</span><span class="pln" style="color:#000000;">ticker_text</span><span class="pun" style="color:#66660;">),</span><span class="pln" style="color:#000000;">        </span><span class="typ" style="color:#66066;">System</span><span class="pun" style="color:#66660;">.</span><span class="pln" style="color:#000000;">currentTimeMillis</span><span class="pun" style="color:#66660;">());</span><span class="pln" style="color:#000000;"></span><span class="typ" style="color:#66066;">Intent</span><span class="pln" style="color:#000000;"> notificationIntent </span><span class="pun" style="color:#66660;">=</span><span class="pln" style="color:#000000;"> </span><span class="kwd" style="color:#0088;">new</span><span class="pln" style="color:#000000;"> </span><span class="typ" style="color:#66066;">Intent</span><span class="pun" style="color:#66660;">(</span><span class="kwd" style="color:#0088;">this</span><span class="pun" style="color:#66660;">,</span><span class="pln" style="color:#000000;"> </span><span class="typ" style="color:#66066;">ExampleActivity</span><span class="pun" style="color:#66660;">.</span><span class="kwd" style="color:#0088;">class</span><span class="pun" style="color:#66660;">);</span><span class="pln" style="color:#000000;"></span><span class="typ" style="color:#66066;">PendingIntent</span><span class="pln" style="color:#000000;"> pendingIntent </span><span class="pun" style="color:#66660;">=</span><span class="pln" style="color:#000000;"> </span><span class="typ" style="color:#66066;">PendingIntent</span><span class="pun" style="color:#66660;">.</span><span class="pln" style="color:#000000;">getActivity</span><span class="pun" style="color:#66660;">(</span><span class="kwd" style="color:#0088;">this</span><span class="pun" style="color:#66660;">,</span><span class="pln" style="color:#000000;"> </span><span class="lit" style="color:#06666;">0</span><span class="pun" style="color:#66660;">,</span><span class="pln" style="color:#000000;"> notificationIntent</span><span class="pun" style="color:#66660;">,</span><span class="pln" style="color:#000000;"> </span><span class="lit" style="color:#06666;">0</span><span class="pun" style="color:#66660;">);</span><span class="pln" style="color:#000000;">notification</span><span class="pun" style="color:#66660;">.</span><span class="pln" style="color:#000000;">setLatestEventInfo</span><span class="pun" style="color:#66660;">(</span><span class="kwd" style="color:#0088;">this</span><span class="pun" style="color:#66660;">,</span><span class="pln" style="color:#000000;"> getText</span><span class="pun" style="color:#66660;">(</span><span class="pln" style="color:#000000;">R</span><span class="pun" style="color:#66660;">.</span><span class="kwd" style="color:#0088;">string</span><span class="pun" style="color:#66660;">.</span><span class="pln" style="color:#000000;">notification_title</span><span class="pun" style="color:#66660;">),</span><span class="pln" style="color:#000000;">        getText</span><span class="pun" style="color:#66660;">(</span><span class="pln" style="color:#000000;">R</span><span class="pun" style="color:#66660;">.</span><span class="kwd" style="color:#0088;">string</span><span class="pun" style="color:#66660;">.</span><span class="pln" style="color:#000000;">notification_message</span><span class="pun" style="color:#66660;">),</span><span class="pln" style="color:#000000;"> pendingIntent</span><span class="pun" style="color:#66660;">);</span><span class="pln" style="color:#000000;">startForeground</span><span class="pun" style="color:#66660;">(</span><span class="pln" style="color:#000000;">ONGOING_NOTIFICATION</span><span class="pun" style="color:#66660;">,</span><span class="pln" style="color:#000000;"> notification</span><span class="pun" style="color:#66660;">);</span>

To remove the service from the foreground, call stopForeground(). This method takes a boolean, indicating whether to remove the status bar notification as well. This method does not stop the service. However, if you stop the service while it's still running in the foreground, then the notification is also removed.

Note: The methods startForeground() and stopForeground() were introduced in Android 2.0 (API Level 5). In order to run your service in the foreground on older versions of the platform, you must use the previoussetForeground() method—see the startForeground() documentation for information about how to provide backward compatibility.

For more information about notifications, see Creating Status Bar Notifications.


0 0
原创粉丝点击