Android: HowTo设置app不被系统kill掉

本文介绍了一种设置Android APP永不被系统终止的方法,在AndroidManifest.xml中加入特定参数,使应用处于核心级别,避免被内存管理器清理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有一种方法可以设置app永远不会被kill,AndroidManifest.xml 中添加:
android:persistent="true"
适用于放在/system/app下的app
 
设置后app提升为系统核心级别,任何情况下不会被kill掉, settings->applications里面也会屏蔽掉stop操作,
设置前 Proc #19: adj=svc  /B 4067b028 255:com.xxx.xxx/10001 (started-services)
# cat /proc/255/oom_adj
4
设置后 PERS #19: adj=core /F 406291f0 155:com.xxx.xxx/10001 (fixed)
# cat /proc/155/oom_adj
-12

 

lowmemorykiller的操作规则比如为

write /sys/module/lowmemorykiller/parameters/adj 0,1,2,4,7,15

write /sys/module/lowmemorykiller/parameters/minfree 2048,3072,4096,6144,7168,8192

 

可以看到,设置persistent后, oom_adj=-12,永远没有机会被lowmemorykiller处理

 

android:persistent 
Whether or not the application should remain running at all times — "true" if it should, and "false" if not. The default value is "false". Applications should not normally set this flag; persistence mode is intended only for certain system applications

 

代码

[java]  view plain copy
  1. ActivityManagerService.java  
  2.     final ProcessRecord addAppLocked(ApplicationInfo info) {  
  3.         ProcessRecord app = getProcessRecordLocked(info.processName, info.uid);  
  4.   
  5.         if (app == null) {  
  6.             app = newProcessRecordLocked(null, info, null);  
  7.             mProcessNames.put(info.processName, info.uid, app);  
  8.             updateLruProcessLocked(app, truetrue);  
  9.         }  
  10.   
  11.         if ((info.flags&(ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT))  
  12.                 == (ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT)) {  
  13.             app.persistent = true;  
  14.             app.maxAdj = CORE_SERVER_ADJ;  
  15.         }  
  16.         if (app.thread == null && mPersistentStartingProcesses.indexOf(app) < 0) {  
  17.             mPersistentStartingProcesses.add(app);  
  18.             startProcessLocked(app, "added application", app.processName);  
  19.         }  
  20.   
  21.         return app;  
  22.     }  


可以看到同时符合FLAG_SYSTEM(/system/app目录)及FLAG_PERSISTENT(android:persistent="true")

的app,设置app.maxAdj = CORE_SERVER_ADJ(-12),而adj=-12不会被lowmemorykiller处理

<think>我们正在处理用户的问题:"我想在macOS系统下运行 ReactNative项目请问howto runreact nativeproject onmac"根据用户提供的引用内容,我们可以总结出在macOS上运行ReactNative项目的步骤和可能遇到的问题。用户引用的内容主要涉及:引用[1]:创建新项目的位置引用[2]:ReactNative提供了命令行工具来在iOS和Android模拟器/设备上运行应用引用[3]:在iOS上运行ReactNative应用时可能遇到的CoreSimulatorService错误引用[4]:用户初次使用React Native遇到的问题,包括使用Expo创建项目时遇到的错误因此,我们将指导用户如何在macOS上运行一个React Native项目,包括两种方式:1.使用Expo(更简单,适合初学者)2.使用React NativeCLI(需要配置Xcode和AndroidStudio环境)由于用户问题中没有指定使用哪种方式,我们将分别介绍两种方式的基本步骤。注意:用户的环境是macOS,因此我们重点介绍iOS模拟器的运行,但也会提及Android。步骤概览:方式一:使用Expo1.安装Node.js和Expo CLI2.创建新项目3.启动项目并在Expo Go应用中查看(或使用模拟器)方式二:使用ReactNative CLI(需要配置开发环境)1.安装Node.js、Watchman(推荐)、Xcode(用于iOS开发)、AndroidStudio(用于Android开发)2.创建新项目3.运行iOS应用(使用Xcode模拟器)或Android应用(使用Android模拟器)根据引用[4],用户可能在使用Expo时遇到问题,因此我们也会提供一些常见问题的解决方法。由于用户之前可能已经创建了项目,我们也会说明如何运行已有的项目。详细步骤:</think>### 在 macOS 上运行 React Native 项目的完整指南 #### 一、环境准备 1. **安装 Node.js 和 npm** 推荐使用 Homebrew 安装: ```bash brew install node brew install watchman # 文件监控工具 ``` 2. **安装 Java Development Kit (JDK)** ```bash brew install --cask adoptopenjdk/openjdk/adoptopenjdk11 ``` 3. **安装 iOS 开发依赖** - 通过 App Store 安装最新版 Xcode - 安装 Xcode 命令行工具: ```bash xcode-select --install ``` 4. **安装 Android 开发依赖** - 安装 [Android Studio](https://developer.android.com/studio) - 配置环境变量(添加到 `~/.zshrc` 或 `~/.bashrc`): ```bash export ANDROID_HOME=$HOME/Library/Android/sdk export PATH=$PATH:$ANDROID_HOME/emulator export PATH=$PATH:$ANDROID_HOME/tools export PATH=$PATH:$ANDROID_HOME/tools/bin export PATH=$PATH:$ANDROID_HOME/platform-tools ``` #### 二、创建/启动项目 ##### 方法 1:使用 React Native CLI ```bash # 安装 CLI npm install -g react-native-cli # 创建新项目 npx react-native init ProjectName # 启动 iOS 模拟器 cd ProjectName npx react-native run-ios # 启动 Android 模拟器 npx react-native run-android ``` ##### 方法 2:使用 Expo(更简单) ```bash # 安装 Expo CLI npm install -g expo-cli # 创建项目 expo init ProjectName # 启动开发服务器 cd ProjectName expo start ``` 用 Expo Go AppApp Store 下载)扫描终端显示的二维码即可预览 #### 三、常见问题解决 1. **CoreSimulatorService 错误** 引用[3]中的错误通常需重置模拟器服务: ```bash sudo killall -9 com.apple.CoreSimulator.CoreSimulatorService rm -rf ~/Library/Developer/CoreSimulator/Devices ``` 2. **Android 设备未识别** 确保已启用 USB 调试: - 在开发者选项中打开 "USB debugging" - 检查设备连接状态: ```bash adb devices ``` 3. **端口冲突** 若 Metro Bundler 无法启动(默认端口 8081): ```bash sudo lsof -i :8081 # 查看占用进程 kill -9 <PID> # 结束进程 ``` #### 四、调试技巧 - **iOS 调试**: `Cmd+D` 打开开发者菜单 → 启用 "Remote Debugging" - **Android 调试**: `Cmd+M` 打开开发者菜单 → 选择 "Debug" - **日志查看**: ```bash npx react-native log-ios npx react-native log-android ``` > 引用[2]:React Native 提供了命令行工具在 iOS/Android 模拟器或真机上运行应用,关键在于正确配置开发环境[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值