导航:首页 > 操作系统 > androidoomadj

androidoomadj

发布时间:2022-09-24 09:30:45

Ⅰ 如何防止android app被kill

相较于/data/app下的应用,放在/system/app下的应用享受更多的特权,比如若在其Manifest.xml文件中设置persistent属性为true,则可使其免受out-of-memory
killer的影响。如应用程序'Phone'的AndroidManifest.xml文件:

<application
android:name="PhoneApp"
android:persistent="true"
android:label="@string/dialerIconLabel"
android:icon="@drawable/ic_launcher_phone">
...
</application>
设置后app提升为系统核心级别,任何情况下不会被kill掉, settings->applications里面也会屏蔽掉stop操作。

这样设置前的log: Proc #19: adj=svc /B 4067b028 255:com.xxx.xxx/10001 (started-services)

# cat /proc/255/oom_adj

4

设置后的log: PERS #19: adj=core /F 406291f0 155:com.xxx.xxx/10001 (fixed)

# cat /proc/155/oom_adj

-12 # 这是CORE_SERVER_ADJ
注:init进程的oom_adj为-16(即SYSTEM_ADJ): cat /proc/1/oom_adj

Android相关部分分析:
在文件frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中有以下的代码:
final
ProcessRecord addAppLocked(ApplicationInfo info) {
ProcessRecord
app = getProcessRecordLocked(info.processName, info.uid);

if
(app == null) {
app
= newProcessRecordLocked(null, info, null);
mProcessNames.put(info.processName,
info.uid, app);
updateLruProcessLocked(app,
true, true);
}

if
((info.flags&(ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT))
==
(ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT)) {
app.persistent
= true;
app.maxAdj
= CORE_SERVER_ADJ; //
这个常数值为-12。
}
if
(app.thread == null && mPersistentStartingProcesses.indexOf(app)
< 0) {
mPersistentStartingProcesses.add(app);
startProcessLocked(app,
"added application", app.processName);
}

return
app;
}


见要想成为core service (即app.maxAdj =
CORE_SERVER_ADJ(-12)),应用程序需要FLAG_SYSTEM和FLAG_PERSISTENT两个标志,FLAG_SYSTEM指
的是应用位于/system/app下,FLAG_PERSISTENT就是指persistent属性。

而对于frameworks/base/services/java/com/android/server/SystemServer.java,则调用
ActivityManagerService.setSystemProcess();
把自己的 app.maxAdj 设置成SYSTEM_ADJ,即-16。

原理:
Android中的进程是托管的,当系统进程空间紧张的时候,会依照优先级自动进行进程的回收。由此带来三个问题:
1)
回收规则: 什么时候回收与回收哪一个?
2)
避免误杀: 如何阻止被回收?
3)
数据恢复与保存: 被回收了怎么办?

Android将进程分为6个等级,它们按优先级顺序由高到低依次是:
1.前台进程(
FOREGROUND_APP)
2.可视进程(VISIBLE_APP
)
3.
次要服务进程(SECONDARY_SERVER )
4.后台进程
(HIDDEN_APP)
5.内容供应节点(CONTENT_PROVIDER)
6.空进程(EMPTY_APP)

特征:
1.如果一个进程里面同时包含service和可视的activity,那么这个进程应该归于可视进程,而不是service进程。
2.另外,如果其他进程依赖于它的话,一个进程的等级可以提高。例如,一个A进程里的service被绑定到B进程里的组件上,进程A将总被认为至少和B进程一样重要。
3.系统中的phone服务被划分到前台进程而不是次要服务进程.

在android中,进程的oom_adj值也就代表了它的优先级。oom_adj值越高代表该进程优先级越低。文件/init.rc中有以下属性设置:
setprop
ro.FOREGROUND_APP_ADJ 0
setprop
ro.VISIBLE_APP_ADJ 1
setprop
ro.SECONDARY_SERVER_ADJ 2
setprop
ro.HIDDEN_APP_MIN_ADJ 7
setprop
ro.CONTENT_PROVIDER_ADJ 14
setprop
ro.EMPTY_APP_ADJ 15
/init.rc中,将PID为1的进程(init进程)的oom_adj设置为SYSTEM_ADJ(-16):
#
Set init its forked children's oom_adj.
write
/proc/1/oom_adj -16

查看本机设置:
cat /sys/mole/lowmemorykiller/parameters/adj
0,1,2,7,14,15

回收时机:
文件/init.rc中:
setprop
ro.FOREGROUND_APP_MEM 1536 // 6M
setprop
ro.VISIBLE_APP_MEM 2048 // 8M
setprop
ro.SECONDARY_SERVER_MEM 4096 // 16M
setprop
ro.HIDDEN_APP_MEM 5120 // 20M
setprop
ro.CONTENT_PROVIDER_MEM 5632 // 22.4M
setprop
ro.EMPTY_APP_MEM 6144 // 24M
这些数字也就是对应的内存阈值,一旦低于该值,Android便开始按顺序关闭相应等级的进程。
注意这些数字的单位是page: 1 page = 4 kB。所以上面的六个数字对应的就是(MB): 6,8,16,20,22,24。

查看现在的内存阈值设置:
cat /sys/mole/lowmemorykiller/parameters/minfree

要想重新设置该值(对应不同的需求):
echo "1536,2048,4096,5120,15360,23040">/sys/mole/lowmemorykiller/parameters/minfree
这样当可用内存低于90MB的时候便开始杀死"空进程",而当可用内存低于60MB的时候才开始杀死"内容供应节点"类进程。

具体的回收实现在ActivityManagerService.java中的函数trimApplications():
1.首先移除package已被卸载的无用进程;
2.基于进程当前状态,更新oom_adj值,然后进行以下操作:
1)
移除没有activity在运行的进程;
2)
如果AP已经保存了所有的activity状态,结束这个AP。
3.
最后,如果目前还是有很多activities 在运行,那么移除那些activity状态已经保存好的activity。

更新oom_adj的值:
在ActivityManagerService.java文件的ComputeOomAdjLocked() 中计算出进程的oom_adj,例如:
if
(app == TOP_APP) {
//
The last app on the list is the foreground app.
adj
= FOREGROUND_APP_ADJ;
app.adjType
= "top-activity";
}

Android kernel中的low memory killer
Android的Low Memory Killer根据需要(当系统内存短缺时)杀死进程释放其内存,源代码在kernel/drivers/misc/lowmemorykiller.c中。简单说,就是寻找一个最合适的进程杀死,从而释放它占用的内存。
最合适的进程是:
• oom_adj越大
• 占用物理内存越多

一旦一个进程被选中,内核会发送SIGKILL信号将之杀死:
for_each_process(p)
{
……
if(selected
== NULL || p->oomkilladj
> selected->oomkilladj ||
(p->oomkilladj
== selected->oomkilladj && tasksize > selected_tasksize))
{
selected
= p;
}
}
if(selected
!= NULL) {
force_sig(SIGKILL,
selected);
}

查看LRU列表:adb shell mpsys activity
当activitydemo在前台时:
包含Service的进程的优先级比较高,在computeOomAdjLocked中将其分为了两小类:
static
final int MAX_SERVICE_INACTIVITY = 30*60*1000;
if
(now < (s.lastActivity+MAX_SERVICE_INACTIVITY)) {
if
(adj > SECONDARY_SERVER_ADJ) {
adj
= SECONDARY_SERVER_ADJ;
app.adjType
= "started-services";
app.hidden
= false;
}
}
if
(adj > SECONDARY_SERVER_ADJ) {
app.adjType
= "started-bg-services";
}

完全让进程不被kill是不可能的,咱们可以通过一些操作,使进程被kill的几率变小:
1)
提高进程的优先级:
*
后台操作采用运行于前台的Service形式,因为一个运行着service的进程比一个运行着后台activity的等级高;
*
按back键使得进程中的activity在后台运行而不是destory,需重载back按键(没有任何activity在运行的进程优先被杀).
*
依赖于其他优先级高的进程;

2)
强制修改进程属性:
*
在进程中设置:setPersistent(true);

*
在Manifest文件中设置(如上)。

Ⅱ 怎么让Android程序一直后台运行,像QQ一样不被杀死

方法:
对于一个service,可以首先把它设为在前台运行:
public void MyService.onCreate() {
super.onCreate();
Notification notification = new Notification(android.R.drawable.my_service_icon,
"my_service_name",
System.currentTimeMillis());
PendingIntent p_intent = PendingIntent.getActivity(this, 0,
new Intent(this, MyMainActivity.class), 0);
notification.setLatestEventInfo(this, "MyServiceNotification, "MyServiceNotification is Running!", p_intent);
Log.d(TAG, String.format("notification = %s", notification));
startForeground(0x1982, notification); // notification ID: 0x1982, you can name it as you will.
}

重要设置-------------------------------
相较于/data/app下的应用,放在/system/app下的应用享受更多的特权,比如若在其Manifest.xml文件中设置persistent属性为true,则可使其免受out-of-memory killer的影响。如应用程序'Phone'的AndroidManifest.xml文件:
<application android:name="PhoneApp"
android:persistent="true"
android:label="@string/dialerIconLabel"
android:icon="@drawable/ic_launcher_phone">
...
</application>
设置后app提升为系统核心级别,任何情况下不会被kill掉, settings->applications里面也会屏蔽掉stop操作。

这样设置前的log: Proc #19: adj=svc /B 4067b028 255:com.xxx.xxx/10001 (started-services)
# cat /proc/255/oom_adj

设置后的log: PERS #19: adj=core /F 406291f0 155:com.xxx.xxx/10001 (fixed)
# cat /proc/155/oom_adj
-12 # 这是CORE_SERVER_ADJ
注:init进程的oom_adj为-16(即SYSTEM_ADJ): cat /proc/1/oom_adj

Android相关部分分析:
在文件frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中有以下的代码:
final ProcessRecord addAppLocked(ApplicationInfo info) {
ProcessRecord app = getProcessRecordLocked(info.processName, info.uid);

if (app == null) {
app = newProcessRecordLocked(null, info, null);
mProcessNames.put(info.processName, info.uid, app);
updateLruProcessLocked(app, true, true);
}

if ((info.flags&(ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT))
== (ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT)) {
app.persistent = true;
app.maxAdj = CORE_SERVER_ADJ; // 这个常数值为-12。
}
if (app.thread == null && mPersistentStartingProcesses.indexOf(app) < 0) {
mPersistentStartingProcesses.add(app);
startProcessLocked(app, "added application", app.processName);
}

return app;
}

可见要想成为core service (即app.maxAdj = CORE_SERVER_ADJ(-12)),应用程序需要FLAG_SYSTEM和FLAG_PERSISTENT两个标志,FLAG_SYSTEM指的是应用位于/system/app下,FLAG_PERSISTENT就是指persistent属性。

而对于frameworks/base/services/java/com/android/server/SystemServer.java,则调用
ActivityManagerService.setSystemProcess();
把自己的 app.maxAdj 设置成SYSTEM_ADJ,即-16。

原理:
Android中的进程是托管的,当系统进程空间紧张的时候,会依照优先级自动进行进程的回收。由此带来三个问题:
1) 回收规则: 什么时候回收与回收哪一个?
2) 避免误杀: 如何阻止被回收?
3) 数据恢复与保存: 被回收了怎么办?

Android将进程分为6个等级,它们按优先级顺序由高到低依次是:
1.前台进程( FOREGROUND_APP)
2.可视进程(VISIBLE_APP )
3. 次要服务进程(SECONDARY_SERVER )
4.后台进程 (HIDDEN_APP)
5.内容供应节点(CONTENT_PROVIDER)
6.空进程(EMPTY_APP)

特征:
1.如果一个进程里面同时包含service和可视的activity,那么这个进程应该归于可视进程,而不是service进程。
2.另外,如果其他进程依赖于它的话,一个进程的等级可以提高。例如,一个A进程里的service被绑定到B进程里的组件上,进程A将总被认为至少和B进程一样重要。
3.系统中的phone服务被划分到前台进程而不是次要服务进程.

在android中,进程的oom_adj值也就代表了它的优先级。oom_adj值越高代表该进程优先级越低。文件/init.rc中有以下属性设置:
setprop ro.FOREGROUND_APP_ADJ 0
setprop ro.VISIBLE_APP_ADJ 1
setprop ro.SECONDARY_SERVER_ADJ 2
setprop ro.HIDDEN_APP_MIN_ADJ 7
setprop ro.CONTENT_PROVIDER_ADJ 14
setprop ro.EMPTY_APP_ADJ 15
/init.rc中,将PID为1的进程(init进程)的oom_adj设置为SYSTEM_ADJ(-16):
# Set init its forked children's oom_adj.
write /proc/1/oom_adj -16

查看本机设置:
cat /sys/mole/lowmemorykiller/parameters/adj
0,1,2,7,14,15

回收时机:
文件/init.rc中:
setprop ro.FOREGROUND_APP_MEM 1536 // 6M
setprop ro.VISIBLE_APP_MEM 2048 // 8M
setprop ro.SECONDARY_SERVER_MEM 4096 // 16M
setprop ro.HIDDEN_APP_MEM 5120 // 20M
setprop ro.CONTENT_PROVIDER_MEM 5632 // 22.4M
setprop ro.EMPTY_APP_MEM 6144 // 24M
这些数字也就是对应的内存阈值,一旦低于该值,Android便开始按顺序关闭相应等级的进程。
注意这些数字的单位是page: 1 page = 4 kB。所以上面的六个数字对应的就是(MB): 6,8,16,20,22,24。

查看现在的内存阈值设置:
cat /sys/mole/lowmemorykiller/parameters/minfree

要想重新设置该值(对应不同的需求):
echo "1536,2048,4096,5120,15360,23040">/sys/mole/lowmemorykiller/parameters/minfree
这样当可用内存低于90MB的时候便开始杀死"空进程",而当可用内存低于60MB的时候才开始杀死"内容供应节点"类进程。

具体的回收实现在ActivityManagerService.java中的函数trimApplications():
1.首先移除package已被卸载的无用进程;
2.基于进程当前状态,更新oom_adj值,然后进行以下操作:
1) 移除没有activity在运行的进程;
2) 如果AP已经保存了所有的activity状态,结束这个AP。
3. 最后,如果目前还是有很多activities 在运行,那么移除那些activity状态已经保存好的activity。

更新oom_adj的值:
在ActivityManagerService.java文件的ComputeOomAdjLocked() 中计算出进程的oom_adj,例如:
if (app == TOP_APP) {
// The last app on the list is the foreground app.
adj = FOREGROUND_APP_ADJ;
app.adjType = "top-activity";
}

Android kernel中的low memory killer
Android的Low Memory Killer根据需要(当系统内存短缺时)杀死进程释放其内存,源代码在kernel/drivers/misc/lowmemorykiller.c中。简单说,就是寻找一个最合适的进程杀死,从而释放它占用的内存。
最合适的进程是:
• oom_adj越大
• 占用物理内存越多

一旦一个进程被选中,内核会发送SIGKILL信号将之杀死:
for_each_process(p) {
……
if(selected == NULL || p->oomkilladj > selected->oomkilladj ||
(p->oomkilladj == selected->oomkilladj && tasksize > selected_tasksize))
{
selected = p;
}
}
if(selected != NULL) {
force_sig(SIGKILL, selected);
}

查看LRU列表:adb shell mpsys activity
当activitydemo在前台时:
包含Service的进程的优先级比较高,在computeOomAdjLocked中将其分为了两小类:
static final int MAX_SERVICE_INACTIVITY = 30*60*1000;
if (now < (s.lastActivity+MAX_SERVICE_INACTIVITY)) {
if (adj > SECONDARY_SERVER_ADJ) {
adj = SECONDARY_SERVER_ADJ;
app.adjType = "started-services";
app.hidden = false;
}
}
if (adj > SECONDARY_SERVER_ADJ) {
app.adjType = "started-bg-services";
}
完全让进程不被kill是不可能的,我们可以通过一些操作,使进程被kill的几率变小:
1) 提高进程的优先级:
* 后台操作采用运行于前台的Service形式,因为一个运行着service的进程比一个运行着后台activity的等级高;
* 按back键使得进程中的activity在后台运行而不是destory,需重载back按键(没有任何activity在运行的进程优先被杀).
* 依赖于其他优先级高的进程;

2) 强制修改进程属性:
* 在进程中设置:setPersistent(true);
* 在Manifest文件中设置(如上)。

Ⅲ 想让android应用常驻后台,不被杀死,各位大神有什么高招

方法: 对于一个service,可以首先把它设为在前台运行: public void MyService.onCreate() { super.onCreate(); Notification notification = new Notification(android.R.drawable.my_service_icon, "my_service_name", System.currentTimeMillis()); PendingIntent p_intent = PendingIntent.getActivity(this, 0, new Intent(this, MyMainActivity.class), 0); notification.setLatestEventInfo(this, "MyServiceNotification, "MyServiceNotification is Running!", p_intent); Log.d(TAG, String.format("notification = %s", notification)); startForeground(0x1982, notification); // notification ID: 0x1982, you can name it as you will. } 重要设置------------------------------- 相较于/data/app下的应用,放在/system/app下的应用享受更多的特权,比如若在其Manifest.xml文件中设置persistent属性为true,则可使其免受out-of-memory killer的影响。如应用程序'Phone'的AndroidManifest.xml文件: <application android:name="PhoneApp" android:persistent="true" android:label="@string/dialerIconLabel" android:icon="@drawable/ic_launcher_phone"> ... </application> 设置后app提升为系统核心级别,任何情况下不会被kill掉, settings->applications里面也会屏蔽掉stop操作。 这样设置前的log: Proc #19: adj=svc /B 4067b028 255:com.xxx.xxx/10001 (started-services) # cat /proc/255/oom_adj 设置后的log: PERS #19: adj=core /F 406291f0 155:com.xxx.xxx/10001 (fixed) # cat /proc/155/oom_adj -12 # 这是CORE_SERVER_ADJ 注:init进程的oom_adj为-16(即SYSTEM_ADJ): cat /proc/1/oom_adj Android相关部分分析: 在文件frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中有以下的代码: final ProcessRecord addAppLocked(ApplicationInfo info) { ProcessRecord app = getProcessRecordLocked(info.processName, info.uid); if (app == null) { app = newProcessRecordLocked(null, info, null); mProcessNames.put(info.processName, info.uid, app); updateLruProcessLocked(app, true, true); } if ((info.flags&(ApplicationInfo.FLAG_SYSTEMApplicationInfo.FLAG_PERSISTENT)) == (ApplicationInfo.FLAG_SYSTEMApplicationInfo.FLAG_PERSISTENT)) { app.persistent = true; app.maxAdj = CORE_SERVER_ADJ; // 这个常数值为-12。 } if (app.thread == null && mPersistentStartingProcesses.indexOf(app) < 0) { mPersistentStartingProcesses.add(app); startProcessLocked(app, "added application", app.processName); } return app; } 可见要想成为core service (即app.maxAdj = CORE_SERVER_ADJ(-12)),应用程序需要FLAG_SYSTEM和FLAG_PERSISTENT两个标志,FLAG_SYSTEM指的是应用位于/system/app下,FLAG_PERSISTENT就是指persistent属性。 而对于frameworks/base/services/java/com/android/server/SystemServer.java,则调用 ActivityManagerService.setSystemProcess(); 把自己的 app.maxAdj 设置成SYSTEM_ADJ,即-16。 原理: Android中的进程是托管的,当系统进程空间紧张的时候,会依照优先级自动进行进程的回收。由此带来三个问题: 1) 回收规则: 什么时候回收与回收哪一个? 2) 避免误杀: 如何阻止被回收? 3) 数据恢复与保存: 被回收了怎么办? Android将进程分为6个等级,它们按优先级顺序由高到低依次是: 1.前台进程( FOREGROUND_APP) 2.可视进程(VISIBLE_APP ) 3. 次要服务进程(SECONDARY_SERVER ) 4.后台进程 (HIDDEN_APP) 5.内容供应节点(CONTENT_PROVIDER) 6.空进程(EMPTY_APP) 特征: 1.如果一个进程里面同时包含service和可视的activity,那么这个进程应该归于可视进程,而不是service进程。 2.另外,如果其他进程依赖于它的话,一个进程的等级可以提高。例如,一个A进程里的service被绑定到B进程里的组件上,进程A将总被认为至少和B进程一样重要。 3.系统中的phone服务被划分到前台进程而不是次要服务进程. 在android中,进程的oom_adj值也就代表了它的优先级。oom_adj值越高代表该进程优先级越低。文件/init.rc中有以下属性设置: setprop ro.FOREGROUND_APP_ADJ 0 setprop ro.VISIBLE_APP_ADJ 1 setprop ro.SECONDARY_SERVER_ADJ 2 setprop ro.HIDDEN_APP_MIN_ADJ 7 setprop ro.CONTENT_PROVIDER_ADJ 14 setprop ro.EMPTY_APP_ADJ 15 /init.rc中,将PID为1的进程(init进程)的oom_adj设置为SYSTEM_ADJ(-16): # Set init its forked children's oom_adj. write /proc/1/oom_adj -16 查看本机设置: cat /sys/mole/lowmemorykiller/parameters/adj 0,1,2,7,14,15 回收时机: 文件/init.rc中: setprop ro.FOREGROUND_APP_MEM 1536 // 6M setprop ro.VISIBLE_APP_MEM 2048 // 8M setprop ro.SECONDARY_SERVER_MEM 4096 // 16M setprop ro.HIDDEN_APP_MEM 5120 // 20M setprop ro.CONTENT_PROVIDER_MEM 5632 // 22.4M setprop ro.EMPTY_APP_MEM 6144 // 24M 这些数字也就是对应的内存阈值,一旦低于该值,Android便开始按顺序关闭相应等级的进程。 注意这些数字的单位是page: 1 page = 4 kB。所以上面的六个数字对应的就是(MB): 6,8,16,20,22,24。 查看现在的内存阈值设置: cat /sys/mole/lowmemorykiller/parameters/minfree 要想重新设置该值(对应不同的需求): echo "1536,2048,4096,5120,15360,23040">/sys/mole/lowmemorykiller/parameters/minfree 这样当可用内存低于90MB的时候便开始杀死"空进程",而当可用内存低于60MB的时候才开始杀死"内容供应节点"类进程。 具体的回收实现在ActivityManagerService.java中的函数trimApplications(): 1.首先移除package已被卸载的无用进程; 2.基于进程当前状态,更新oom_adj值,然后进行以下操作: 1) 移除没有activity在运行的进程; 2) 如果AP已经保存了所有的activity状态,结束这个AP。 3. 最后,如果目前还是有很多activities 在运行,那么移除那些activity状态已经保存好的activity。 更新oom_adj的值: 在ActivityManagerService.java文件的ComputeOomAdjLocked() 中计算出进程的oom_adj,例如: if (app == TOP_APP) { // The last app on the list is the foreground app. adj = FOREGROUND_APP_ADJ; app.adjType = "top-activity"; } Android kernel中的low memory killer Android的Low Memory Killer根据需要(当系统内存短缺时)杀死进程释放其内存,源代码在kernel/drivers/misc/lowmemorykiller.c中。简单说,就是寻找一个最合适的进程杀死,从而释放它占用的内存。 最合适的进程是: • oom_adj越大 • 占用物理内存越多 一旦一个进程被选中,内核会发送SIGKILL信号将之杀死: for_each_process(p) { …… if(selected == NULL p->oomkilladj > selected->oomkilladj (p->oomkilladj == selected->oomkilladj && tasksize > selected_tasksize)) { selected = p; } } if(selected != NULL) { force_sig(SIGKILL, selected); } 查看LRU列表:adb shell mpsys activity 当activitydemo在前台时: 包含Service的进程的优先级比较高,在computeOomAdjLocked中将其分为了两小类: static final int MAX_SERVICE_INACTIVITY = 30*60*1000; if (now < (s.lastActivity+MAX_SERVICE_INACTIVITY)) { if (adj > SECONDARY_SERVER_ADJ) { adj = SECONDARY_SERVER_ADJ; app.adjType = "started-services"; app.hidden = false; } } if (adj > SECONDARY_SERVER_ADJ) { app.adjType = "started-bg-services"; } 完全让进程不被kill是不可能的,我们可以通过一些操作,使进程被kill的几率变小: 1) 提高进程的优先级: * 后台操作采用运行于前台的Service形式,因为一个运行着service的进程比一个运行着后台activity的等级高; * 按back键使得进程中的activity在后台运行而不是destory,需重载back按键(没有任何activity在运行的进程优先被杀). * 依赖于其他优先级高的进程; 2) 强制修改进程属性: * 在进程中设置:setPersistent(true); * 在Manifest文件中设置(如上)。

Ⅳ 手机总是容易满内存,到底是什么在占内存

问这个问题,应该是Android手机的玩家吧,而且你对Android的内存机制也不了解,简单来说,Android中的内存就是给你用的,不用还不正常,根本不用担心内存怎么只剩下几百M呢。

像我们这些在Windows陪伴下成长起来的玩家,“内存不足”经常遇到,但是Android有着与Windows完全不一样的内存管理机制,Windows上的那一套,对Android并没用。

Android中可用内存是个没意义的数字

Windows中一旦程序被关闭,分配的内存也就释放出来,然而在Android中运行过的应用绝大多数是从前台转入到后台,并保留在内存中并不会也不需要主动释放,这样下次再运行该应用时,可以更快的启动。

无论手机的物理内存有多大,Android都能将其充分利用,将需要用到的数据从硬盘读入到内存,以提高数据访问性能,也就是说, 在Android系统中,可用内存越小,表明其调用的数据就越多,访问的命中率就越高,系统也就越快 。

你可能会问,当打开的应用越来越多,占用的内存总会爆满的,那怎么办呢?

Android有着优秀的内存回收机制

Android使用了一个名为Low Memory Killer(LMK)的机制来管理内存,当内存出现不足时,LMK就开始挥舞屠刀杀掉一些进程以获得新的内存空间。

Android有一套独特的进程管理,它会以oom_adj来表示进程的重要性,oom_adj的值越小,则重要性越高,oom_adj的值越大,该进程被系统选中杀掉的可能性越高。

Android默认的进程管理策略

为了更好的评估进程的重要性,Android将进程分为六类,如下所述:

前台进程:oom_adj=0,指正在当前屏幕上显示的进程和一些系统进程,一旦你回到主界面 或切换到其它程序,当前进程变为隐藏进程,前台进程是不会杀掉的;

可见进程:oom_adj=1,可见进程虽然不在前台,但依然可见,如widget、输入法等,这部分进程也非常重要,基本上不可能被杀掉;

次要服务:oom_adj=2,目前正在运行的一些服务,如下载、播放音乐,它们虽然属于次要服务,但与系统息息相关,一般也不会被杀掉;

隐藏进程:oom_adj=7,这个很容易理解,当应用从前台转入到后台后,也就成为隐藏进程了,通常一键清理内存就是清掉这些隐藏进程;

内容提供者:oom_adj=14,没有程序实体,只提供内容供别的程序去用的,比如日历供应节点,显然这类进程最有可能被先杀掉;

空进程:oom_adj=15,有些程序在程序退出后,依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记录程序的一些 历史 信息,这类进程无疑是要最先被杀掉的。

Android的内存管理机制非常适合嵌入式系统,能充分发挥出硬件的潜力,当内存越大,它的优势就越明显。

Android手机需要清内存吗?不需要

那么Android手机到底要不要清内存?结论是:不需要!其实这个结论也适用iPhone手机。

手机内存分为两部分,运行内存和存储内存。买手机时,一个型号的手机有很多套餐可以选择,比如6 64GB、4+128GB,前面的4GB,6GB就是运行内存,后者则是存储内存。

占用手机运行内存的主要是手机运行程序时被软件占用的内存,安卓手机的系统会把手机里说有的软件都放在后台运行之中,因为这样开启软件的时候会节约等待启动的时间,除非用户自己去设置关闭开机自动启动软件。

可运行内存一共就那么多,虽然现在新款手机的运行内存不断加大但随着软件的不断更新升级,占用的手机内存也会越来越大,这都是成正比的。为了清理软件占用的内存,安卓手机都会配备“一键清理”的功能去清理运行内存,这样可以使因为占用运行内存过多而变卡顿的手机流畅起来。

而占用存储内存的东西就有很多了,比如软件的数据缓存、微信qq的聊天记录、相册里的照片、下载的音乐视频、短信垃圾、手机随着系统升级,本身系统所占的内存也会越来越大,这些都会占用手机的存储内存。

其中最占用存储内存的就当属照片和微信了。那么该怎么看微信到底占用了多少内存呢?

点开微信中的[我]-[设置]-[通用]-[清理微信存储空间],等待几秒钟后就会显示占了多少内存了,如果你不经常清理,那这个数字一定会让你大吃一惊。然后点击下方的[管理微信聊天数据]清楚就好了。

一般如果是安卓手机的话,如果手机内存较小,很容易出现内存不够用的情况。安卓系统、应用厂商的服务、手机应用等都会占用大量的内存,由于国内手机厂商深度定制的安卓系统,普遍存在全家桶,大量的服务和应用存在自启和连环唤醒情况,大量消耗用户内存,造成手机内存占用过高,严重影响了用户的使用体验。而反观国外很多采用原生安卓系统的手机,虽然内存并不大,但内存的占用率却极低,实际的应用体验却更优秀。所以国内手机厂商的全家桶,是造成手机内存占用率较高的主要原因。一般可以通过手机助手清理内存,禁止应用自启,卸载无用应用等方法解决手机内存占用较多的问题。

国产手机系统全家桶导致手机内存占用过大

由于目前手机的硬件利润较低,很多国内手机厂商都是通过预装应用的方式,提升手机的利润。所以国产手机普遍存在以全家桶的方式,打包预装各种应用和服务,通常会在手机中进行自启,或者连环唤醒,占用了大量的手机内存,严重影响了手机用户的体验。

手机内存占用过高,可以借助手机卫士清理内存

如果手机的内存占用过高,可以借助手机卫士等工具对手机的内存进行清理,对于不常用的手机应用进行卸载,提升手机的运行效率。另外也可以通过禁止手机应用的自启,来提升手机内存的使用效率,但对于手机存在应用连唤醒的情况,是无效的。所以手机卫士或管家,只能暂时解决手机内存占用过高的问题,无法从根本上解决问题。

使用第三方原生安卓系统,可大幅降低手机内存占用

目前的cm等第三方原生安卓系统,一般都不夹带国产手机厂商的全家桶,系统十分纯净,一般对于手机内存的占用都比较小。一般如果条件允许的话,可以刷第三方的原生安卓系统,提升手机内存的使用效率。

cm系统是老手机的救星

华为荣耀畅玩4,搭载的骁龙410芯片,仅配置了1g内存,可以说硬件配置十分渣,运行华为自带emui系统,内存占用极高,基本卡都没办法使用。但刷cm13系统后,竟然满血复活,运行普通应用十分流畅,完全可以当做备用机使用。这也充分说明,很多国产手机在硬件配置方面没有太大瓶颈,主要是国产手机系统的全家桶,占用大量内存,拖慢了整机的速度。

对于手机内存占用过大的问题,主要是由于安装和启动的手机应用较多,特别是很多国产手机的全家桶,占用和消耗了大量的手机内存,影响了手机的使用效率。一般可以通过手机卫士等工具,清理内存,禁止应用自启等方法解决手机内存占用过大的问题。如果想从根本上解决这个问题,更多的还是依靠手机厂商摒弃全家桶,推出类似cm的第三方原生安卓系统。如果条件许可的话,用户也可以刷cm等比较纯净的第三方安卓系统。

关闭一些没必要自动运行的软件,浏览器可以选择无图模式,音乐播放器可以关闭歌手图片显示,视频播放器要时刻的清理缓存,还有软件安装后自动删除安装包, 游戏 停止运行后,手动清理全盘缓存,QQ压缩包,文件管理器中可以找到,格式zip,如果你知道文件夹是哪个软件所有,觉得清理掉不会影响使用,就清理了,你会发现手机内存又多了至少2GB,不信你就试试吧

智能手机的用户有一个无法规避的问题,那就是手机的卡顿问题,造成手机卡顿的因素有很多,内存不足便是其中的一种。为了尽量避免手机出现卡顿的这种情况,部分用户不惜花费重金来购买高内存的手机,但是依然无法完全规避因为内存不足所导致的手机卡顿问题。低内存手机很好理解,为何高内存手机同样也会出现该问题呢?手机中究竟是怎么在使用内存,该如何规避因为内存不足而导致手机卡顿的这种问题呢?

关于手机内存您又了解多少呢,我们先单纯的从技术面来简单的聊聊这个问题。手机内存可以分为两大类,一类是运行内存,一类是存储内存。前者相当于电脑中的内存,内存空间越大同时支持的运行程序也就越多,较为常见的运行内存有6G、8G、12G等,甚至一些旗舰机型也支持32G的运行内存;后者相当于电脑中的硬盘,内存空间越大意味着能够存储更多的内容资源,包括下载的程序、照片、音频、视频等,较为常见的存储内存有64G、128G、256G等,甚至一些旗舰机型也推出了512G以上的存储内存。

手机厂商标称的内存大小是否与我们实际使用的空间相同呢?

前不久岳云鹏也因为在微博上提出了这个问题而上了热搜!岳云鹏购买了一款128G的手机,但是实际能够使用的空间仅为112G,不仅发出了手机内存难道也存在“公摊面积”的疑问。无论是运行内存也好,还是存储内存也罢,手机厂商采用的进制计算方式与系统不同,导致存在一定的偏差问题(一个采用的是1000进制,一个采用的是1024进制)。除了进制的问题外,手机内存还要被其他内容所占用,例如运行内存开机之后的系统进程占用,通常可供用户使用的运行内存仅为总运行内存的一般,存储内存需要安装操作系统,系统的默认软件等。

排除了这些基本因素外,再来说说智能手机剩余内存为何会容易占满的问题。

先来说说运行内存容易占满的问题(因为运行机制的不同,这里主要讨论的是安卓手机,苹果手机很少会出现此类问题),主要的原因在于智能软件的自行唤醒功能。智能手机现在所使用的软件大部分为免费软件,主要依靠用户流量所带来的广告收益盈利。无论是前台还是后台,软件运行才是获得收益的前提,很多软件或者是同厂软件在没有获得用户同意的前提下,会悄悄地自动进行唤醒,悄然运行在用户的运行内存中,势必会导致用户运行内存逐渐占满。工信部为此也拟定了个人用户信息保护征求意见稿,未经用户许可的前提下,APP软件不得自行唤醒或者更新。

那么,存储内存就是是何原因会逐渐占满呢?

手机硬件的提升势必会带来更大的资源占用,举一个简单的例子,现在供用户手机拍照高清摄像头成为了发展趋势,之前一张照片或许仅为4M左右,现在一张照片将在20M以上,对于存储的需求也越来越高。除此之外,出于个人信息安全的角度考虑,很多APP软件并不会在服务器端存储用户的个人数据,这一数据存储在用户的智能手机存储内存,例如大家较为常用的微信、QQ等,随着时间的推移,您会发现此类程序占用的空间越来越高!

对于运行内存,我们可以通过设置、优化运行程序来降低其占用率,确保手机不会因此而卡顿。不同品牌的手机都会自带内存优化工具,以我手上的三星手机为例,可以在智能管理器、内存选项中查看当前的使用状态,并且可以根据系统的提示进行内存优化。另外在手机设置、程序管理中,大家可以对具体的某款应用程序进行设置,关闭其后台自动唤醒的功能。对于手机操作并不是十分熟悉的用户,可以下载三方手机优化软件来自动对运行内存进行优化,不过个人并不建议如此操作,毕竟三方软件也要耗费手机硬件资源。

对于存储内存,只能够是删除不必要的数据进行优化。合理利用云存储是个不错的方法,无论是手机自带,还是三方云存储都能够缓解我们存储内存的压力(只要能够连接网络,有需求的数据直接从云端下载即可)。对于微信、QQ此类占据空间的程序,只能够通过删除内容的方式来降低空间,为了方便也可以直接卸载、重新安装来释放空间。为了避免关键数据出现丢失,卸载之前可以将数据导致电脑端进行存储,各款软件基本上都提供了由手机向电脑进行数据迁移的功能。

关于手机内存总是不够用的问题,是否也发生在您的手机上呢,最终又是如何解决的呢?欢迎大家留言讨论,分享经验。

手机占用内存最大的就是系统和软件,系统方面你可以通过刷机来改变大小,可以在手官网(或者其他大神资源)找一个自己机型的精减刷机包, 软件方面你可以在安智市场里面下载 历史 版本,较小的软件包可以减轻手机内存压力,另外你还可以root手机,root后可以禁止软件自启,阻止软件相互唤醒,删除不需要的系统软件,一星期左右可以关机一次,彻底释放内存。

【手机总是容易满内存,到底什么占内存?】

手机的内存我们在这里一般称为手机存储数据的空间。一般它类似于电脑的硬盘,手机的内存基本上能够给我们带来的好处是让我们手机能够安装更多的数据,存放更多的文件,不会因为手机内存的不足影响手机的流畅,让手机卡顿。

我们在使用手机的过程中确实会担心手机的内存不足,在我们手机内存不足的情况下,我们会建议大家考虑清理一些内存数据,这样子的能够让手机的内存相对比较充足,手机会相对比较流畅。


特别是对于苹果手机来说,苹果手机如果内存不足的话,在日常使用过程中确实会出现非常严重的卡顿问题,手机在内存严重不足的情况下,能够让手机整体体验值相对不高。

那么,手机的内存到底是哪些那种东西呢?

手机的内存一方面指的是手机系统,手机本身的内置软件所占用的空间。也就是手机出产时,它所占据的一部分的空间。这部分空间是固定的,除非是在系统之后升级,可能会有一定空间的变化,基本上是不会改变的。

手机内存另外一方面是我们在使用手机过程中下载的各种APP以及我们存储的各种数据照片,视频图片等等。同样还有我们在使用一些APP的时候会出现的一些缓存数据,特别像微信,它的缓存数据占据空间相对较大。


所以,我们在日常使用手机过程中,一定要注意清除手机APP中的一些缓存,这样能保证手机的内存数据得到更好的使用,不会因为手机内存数据的不足影响手机的流畅。

手机内存分为运行内存(RAM,简称运存)和存储内存(ROMZ)两种。运行内存比较少,手机一般4G和6G居多。存储内存较大,一般16G—512G,其中64G和128G居多。比如一款手机为“6+64G”的内存,就代表着6G的运行内存和64G的存储内存。

运行内存是为手机运行的程序服务的,换句话说,就是储存运行中的程序的这部分内存。手机不像电脑,当你退出一个程序后,这个程序不会直接关闭,而是在后台继续运行。就比如当你在下载一部电影的时候,你返回桌面或者打开其他软件,这部电影还在继续下载。

只有2G运存的安卓机相信不少人都用过,只要后台运行的程序一多,分分钟给你卡到原地爆炸。而反观只有1G运存的苹果却从来不会出现这种情况,这是因为两者的系统运行机制不同。苹果的ios系统对于后台运行的软件有很好的优化,系统只会分少量的资源给后台运行的应用。这样即保证了后台应用的运行,也不会耽误新程序的加载速度。而安卓系统就不同了,对于后台运行的程序没有限制,所以后台一多,马上变卡。

不过现在的安卓系统新增了一个叫Low Memory Killer(LMK)的后台程序管理机制。每当运行内存不足时,LMK都会自动关闭最不重要的后台程序来为新程序腾出运行内存和系统空间。所以现在的安卓机只要你不是开太多程序,4—6G的运行内存不会被占满。

存储内存相信大家更熟悉了,就是用来储存数据的内存。手机中每个文件、软件、图片、视频都需要占用存储内存。而且,随着手机的使用,系统中的垃圾文件会越来越多,更新的软件越来越大,导致内存不够用。在这个一个QQ、微信动辄几个G的时代,32G的手机内存是不够用了。笔者建议大家最好买64G以上的手机,并且定期恢复出厂设置。

设置一下后台最多只同时打开三个或四个应用软件,其实安卓没有必要那么在乎还剩下多少内存,你会发现六个g和四个g内存占用率都是差不多的。都剩下不了多少内存。系统会根据使用习惯把常用软件从rom调入ram中供用户随时快速打来。

Ⅳ Android 怎么将一个app 设置为持久app,不被low memory kill 关闭

app 持久 persistent
[Solution]

1. 将app 的manifest.xml 中的 application 中添加属性 android:persistent="true"
2. 对这个APP 使用platform 的签名
3. 放置在system/app 下面
注: 一个app 被设置为 persistent 后,将很难被low memory kill 杀掉(oom_adj=-12),请在设置之前仔细确认是否必须,否则将浪费掉memory。

Ⅵ 怎样使一个Android应用不被杀死

要让android应用不被杀死,可以开启一个service,一直检测是否关闭了应用,一旦关闭马上重新启动。
当然首先要保证service不被杀死,应当提升service的优先级,设为前台运行。也可以开启两个service互相检测,一旦其中一个被关闭,另一个 马上重启对方。可以保证其生命稳定。这种方法也不是都行的,有些系统仍然能杀死。

Ⅶ 为什么安卓后台运行的程序关掉后又自动重启

安卓系统在后台有大量的程序运行,即使通过内存清理软件清理后,过一会又有很多程序自动开始运行。由于安卓设计机制,当需要内存时,后台一些程序会自动关闭,释放内存。
可以采取以下方法限制后台程序:
1.打开手机设置找到开发人员选项,点击进入。
2.打开开发人员选项后,我们滑到最下方,找到后台进程限制,点击。
3.选择自己需要的模式。这里有6个选项,可根据自己需要选择相应的模式,默认是标准限制,只在必要时关闭后台程序,建议选择“不得超过4个进程”,限制太少的话会关闭一些需要的程序,比如。设置后系统会自动选择重要的程序做后台,而很多垃圾软件进程被自动清除。
另外对于一些集成应用不能卸载的可以在程序管理里停用的,可以结合一起使用。
Android采取了一种有别于Linux的进程管理策略,有别于Linux的在进程活动停止后就结束该进程,Android把这些进程都保留在内存中,直到系统需要更多内存为止。这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度。
Android是依据一个名为LRU(last recently used 最近使用过的程序)列表,将程序进行排序,并结束最早的进程。其实安卓的内存管理机制是这样的,如下:
1.系统会对进程的重要性进行评估,并将重要性以“oom_adj”这个数值表示出来,赋予各个进程;(系统会根据“oom_adj”来判断需要结束哪些进程,一般来说,“oom_adj”的值越大,该进程被系统选中终止的可能就越高)
2.前台程序的“oom_adj”值为0,这意味着它不会被系统终止,一旦它不可访问后,会获得个更高的“oom_adj”,我们推测“oom_adj”的值是根据软件在LRU列表中的位置所决定的;
3.Android不同于Linux,有一套自己独特的进程管理模块,这个模块有更强的可定制性,可根据“oom_adj”值的范围来决定进程管理策略,比如可以设定“当内存小于X时,结束“oom_adj”大于Y的进程”。这给了进程管理脚本的编写以更多的选择。

Ⅷ 如何防止android程序被kill掉

如应用程序'Phone'的AndroidManifest.xml文件: ... 设置后app提升为系统核心级别,任何情况下不会被kill掉, settings->applications里面也会屏蔽掉stop操作。 这样设置前的log: Proc #19: adj=svc /B 4067b028 255:com.xxx.xxx/10001 (started-services) # cat /proc/255/oom_adj 4设置后的log: PERS #19: adj=core /F 406291f0 155:com.xxx.xxx/10001 (fixed) # cat /proc/155/oom_adj -12 # 这是CORE_SERVER_ADJ注:init进程的oom_adj为-16(即SYSTEM_ADJ): cat /proc/1/oom_adjAndroid相关部分分析:在文件frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中有以下的代码: final ProcessRecord addAppLocked(ApplicationInfo info) { ProcessRecord app = getProcessRecordLocked(info.processName, info.uid); if (app == null) { app = newProcessRecordLocked(null, info, null); mProcessNames.put(info.processName, info.uid, app); updateLruProcessLocked(app, true, true); } if ((info.flags&(ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT)) == (ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT)) { app.persistent = true; app.maxAdj = CORE_SERVER_ADJ; // 这个常数值为-12。 } if (app.thread == null && mPersistentStartingProcesses.indexOf(app) < 0) { mPersistentStartingProcesses.add(app); startProcessLocked(app, "added application", app.processName); } return app; }可见要想成为core service (即app.maxAdj = CORE_SERVER_ADJ(-12)),应用程序需要FLAG_SYSTEM和FLAG_PERSISTENT两个标志,FLAG_SYSTEM指的是应用位于/system/app下,FLAG_PERSISTENT就是指persistent属性。而对于frameworks/base/services/java/com/android/server/SystemServer.java,则调用 ActivityManagerService.setSystemProcess();把自己的 app.maxAdj 设置成SYSTEM_ADJ,即-16。原理:Android中的进程是托管的,当系统进程空间紧张的时候,会依照优先级自动进行进程的回收。由此带来三个问题: 1) 回收规则: 什么时候回收与回收哪一个? 2) 避免误杀: 如何阻止被回收? 3) 数据恢复与保存: 被回收了怎么办? Android将进程分为6个等级,它们按优先级顺序由高到低依次是: 1.前台进程( FOREGROUND_APP) 2.可视进程(VISIBLE_APP ) 3. 次要服务进程(SECONDARY_SERVER ) 4.后台进程 (HIDDEN_APP) 5.内容供应节点(CONTENT_PROVIDER) 6.空进程(EMPTY_APP) 特征:1.如果一个进程里面同时包含service和可视的activity,那么这个进程应该归于可视进程,而不是service进程。2.另外,如果其他进程依赖于它的话,一个进程的等级可以提高。例如,一个A进程里的service被绑定到B进程里的组件上,进程A将总被认为至少和B进程一样重要。3.系统中的phone服务被划分到前台进程而不是次要服务进程. 在android中,进程的oom_adj值也就代表了它的优先级。oom_adj值越高代表该进程优先级越低。

Ⅸ 怎么让 Android 程序一直后台运行,像 QQ 一样不被杀死

1、首先要保证你的程序一直在于后台运行,也就是所谓和守护程序一样,而且在任何认为kill和系统内存回收kill后,保证重启。
2、获取系统内部资源。
3、上报策略,间隔时间上报还是按月按天上报。
4、监测网络,当网络开启的时候第一时间上报数据。
5、服务器连接。
对于以上问题的解决:
1、利用广播BroadcastReceiver监听,当系统启动时启动服务service,监听的action是
android.intent.action.BOOT_COMPLETED,当服务被kill时在onDestroy()再次启动服务,在
onStartCommand()中 设置 flags = START_STICKY;return
super.onStartCommand(intent, flags, startId),保证服务重启。
2、利用getPackageManager(),getInstalledPackages(),getApplicationInfo()来获取系统安装数据。
3、上报策略可以每天(时间间隔24小时),但是不是很准确,一般按日上报不做时间间隔这样个人认为比较准确。
4、检测开启网络上报数据,还是利用广播BroadcastReceiver监听,监听action为android.net.conn.CONNECTIVITY_CHANGE,当发现网络开启时就触发数据上报。
5、服务器连接,如果你了解java熟悉java企业级开发,那么你对httpclient并不陌生,很幸运的是android sdk已经集成了httpclient,那我们服务器连接首选它了。

以上是我做的解决方案,你是否有更好的替代品,希望我只是抛了块砖头,后面你继续。。。。

service被系统异常kill掉后回重启。有以下值:

onStartCommand有三种返回值:
START_STICKY:sticky的意思是“粘性的”。使用这个返回值时,我们启动的服务跟应用程序”粘”在一起,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务。当再次启动服务时,传入的第一个参数将为null;
START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。
START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。

Ⅹ android源码下 怎么修改内存阀值

android源码下 修改内存阀值的方法为:
第一步:首先建立一个XXX.txt文件,输入以下代码:
#!/system/bin/sh
echo "1536,2048,4096,6144,8192,12288" > /sys/mole/lowmemorykiller/parameters/minfree ;
这个代码是基于MFM配置3对应的数值,用了几天这个数值了没发现问题,所以暂时以这个数值为例。
然后保存,将保存好的XXX.txt文件修改为67-Jasonfix
将这个67-Jasonfix文件用RE管理器放入system/etc/init.d下(这个文件夹里面都是开机脚本设定。
然后将权限改为:全部打钩。
第二步:修改install-recovery.sh(在system/etc目录下)
(1).找到这些脚本所在行
sh /system/etc/init.d/XXXXX
对应加入
sh /system/etc/init.d/67-Jason
(2).然后找到
echo A,B,C,D,E,F /sys/mole/lowmemorykiller/parameters/minfree
删除这行并保存即可。

阅读全文

与androidoomadj相关的资料

热点内容
大地影城今日影讯时间表 浏览:788
索尼的安卓10怎么样 浏览:968
程序员为什么喊命苦 浏览:740
服务器现在什么语言开发最多 浏览:16
法国啄木鸟影片名字叫什么 浏览:416
vboxandroidx86 浏览:290
地底世界 小说 浏览:365
单片机不包括 浏览:783
肉文有声 浏览:404
付费的片 浏览:783
编译阶段文件分为 浏览:97
数控编程大小头怎样调 浏览:683
单片机技术及工程实践 浏览:172
用手机编程用什么软件 浏览:916
看岛国片网址 浏览:420
男主叫叶天的小说 浏览:378
jdk目录下的文件夹 浏览:951
好看的带颜色的现代小说 浏览:699
怎么看app什么时候更新 浏览:220
各银行的官方app是什么 浏览:782