如何使Android应用不被杀
来源:互联网 发布:北美省钱快报假货 知乎 编辑:程序博客网 时间:2024/06/10 05:38
看了一篇写的非常不错
Android 操作系统的内存回收机制 http://www.oschina.net/question/129540_64132
总结一下有一下几点:
- 必须是非 persistent 进程,即非系统进程;
- 必须是空进程,即进程中没有任何 activity 存在。如果杀死存在 Activity 的进程,有可能关闭用户正在使用的程序,或者使应用程序恢复的时延变大,从而影响用户体验;
- 必须无 broadcast receiver。运行 broadcast receiver 一般都在等待一个事件的发生,用户并不希望此类程序被系统强制关闭;
- 进程中 service 的数量必须为 0。存在 service 的进程很有可能在为一个或者多个程序提供某种服务,如 GPS 定位服务。杀死此类进程将使其他进程无法正常服务。
这个时候才会杀掉进程。
具体代码只粘贴一下,需要详细讲解请那片文章
final void trimApplications() { synchronized(this) { for(int i = mRemovedProcesses.size() - 1; i >= 0; i--) { ProcessRecord app = (ProcessRecord)mRemovedProcesses.get(i); if(app.activities.size() != 0 || app.curReceiver != null || app.services.size() != 0) continue; Slog.i("ActivityManager", (new StringBuilder()).append("Exiting empty application process ").append(app.processName).append(" (").append(app.thread == null ? null : ((Object) (app.thread.asBinder()))).append(")\n").toString()); if(app.pid > 0 && app.pid != MY_PID) { EventLog.writeEvent(30023, new Object[] { Integer.valueOf(app.pid), app.processName, Integer.valueOf(app.setAdj), "empty" }); Process.killProcessQuiet(app.pid); } else { try { app.thread.scheduleExit(); } catch(Exception e) { } } cleanUpApplicationRecordLocked(app, false, true, -1); mRemovedProcesses.remove(i); if(app.persistent && app.persistent) addAppLocked(app.info, false); } updateOomAdjLocked(); } }
下面讲解一下自己的心得
1. 用Notification绑定Service,让Service优先级别高,不过,这样需要通知栏一直显示图标,具体代码
NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); Notification n = new Notification(R.drawable.ic_launcher, "Hello,there!", System.currentTimeMillis()); n.flags = Notification.FLAG_ONGOING_EVENT; Intent i = new Intent(this, MainActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); // PendingIntent PendingIntent contentIntent = PendingIntent.getActivity(this, R.string.app_name, i, PendingIntent.FLAG_UPDATE_CURRENT); n.setLatestEventInfo(this, "Hello,there!", "Hello,there,I'm john.", contentIntent); nm.notify(R.string.app_name, n);
2.待续
- 如何使Android应用不被杀
- 怎样使一个Android应用不被杀死
- 怎样使一个Android应用不被杀死
- 怎样使一个Android应用不被杀死
- 怎样使一个Android应用不被杀死?
- 怎样使一个Android应用不被杀死?(整理)
- 怎样使一个Android应用不被杀死
- 怎样使一个Android应用不被杀死?(整理)
- 怎样使一个Android应用不被杀死?
- 怎样使一个Android应用不被杀死?
- 怎样使一个Android应用不被杀死?
- 怎样使一个Android应用不被杀死?
- 怎样使一个Android应用不被杀死?
- 怎样使一个Android应用不被杀死?(整理)
- 怎样使一个Android应用不被杀死?
- 怎样使一个Android应用不被杀死?(整理)
- 怎样使一个Android应用不被杀死?
- 怎样使一个Android应用不被杀死?(整理)
- wince5.0 屏幕旋转
- Realize Php
- 商业智能领域需要了解的数据库优化理论
- 图论中几个算法的总结
- 年底了,胡乱记录下
- 如何使Android应用不被杀
- Timer和TimerTask详解
- phpcms v9忘记后台密码怎么办?
- vmware vsphere常见问题
- 取时间差去掉周末、周六、周日 .net
- [转]如果一场暴风雨中的所有雨水汇聚成一整滴落下来会怎么样?
- spring中的定时器功能
- 当前系统时间包括时分秒以及星期
- cs,