进程优先级优化(避免休眠的时候进程被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.
- 进程优先级优化(避免休眠的时候进程被KILL,主要面向service)(笔记)
- Android学习之 如何提高Service的优先级、当系统释放更多内存时、防止Service进程被Kill掉
- Service入门:进程的优先级
- Android进阶之进程优先级及提高优先级的方法(Service进程防杀死)
- 保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护
- 保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护
- 保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护
- android避免service被kill
- 进程休眠的方法
- 进程休眠的方法
- 系统休眠,防止service被kill
- Android 进程优先级及提高优先级的方法(Service尽量不死之法)
- 进程kill的方法
- Android笔记进程优先级
- 僵尸进程的产生和避免,如何kill杀掉linux系统中的僵尸defunct进程
- 程序被系统kill——Service进程滥用
- linux进程的休眠(等待队列)
- linux进程的休眠(等待队列)
- 线形布局下的layout_weight(比重)属性
- JS中字符串的相关操作
- tomcat可以正常启动但是在Eclipse下不可以正常启动
- java面向对象
- Unofficial AirPlay Protocol Specification
- 进程优先级优化(避免休眠的时候进程被KILL,主要面向service)(笔记)
- phpcms v9 推送【删除】和【附加字段】
- 经典左右布局demo
- 关于数组的面试题总结(二)
- cocos2dx鼠标拖动与释放
- 【嵌入式】stm32架构
- Thrift源码分析(五)-- FrameBuffer类分析
- 基于Office Visio 2010 图表绘制
- (一)Python入门:环境变量和开发环境的配置