
# 对接oom高内存应用退出广播
#### 功能介绍
云手机进程占用的内存过高，可能会引发手机容器卡顿。为了防止内存占用过高，系统会在内存占用过高时，会触发oom kill对高内存占用的进程进行查杀，为了使得用户感知到应用被查杀的动作，系统查杀应用后会发送广播进行通知。
#### 广播信息
- 广播action：android.intent.action.APP_KILLED
- 广播附带信息：
  - 查杀原因：key是reason；value是high-memory
  
  - 被杀的进程：key是comm；value是进程名称
  
  - 被杀进程的uid：key是uid；value是进程uid
   
广播附带信息的获取方法请参考[使用方法]。
 #### 使用方法
**监听被杀应用广播**
客户后台管理程序可以通过监听被杀应用广播，获取被杀应用的包名和原因。
```
public static final String ACTION_APP_KILLED = "android.intent.action.APP_KILLED"; 
private MyBroadcastReceiver mBroadcastReceiver = new MyBroadcastReceiver(); 
private void registerReceiver() { 
IntentFilter filter = new IntentFilter(ACTION_APP_KILLED); 
this.registerReceiver(mBroadcastReceiver, filter); 
} 
private void unregisterReceiver() { 
this.unregisterReceiver(mBroadcastReceiver); 
} 
private class MyBroadcastReceiver extends BroadcastReceiver { 
private static final String TAG = "AppKilled"; 
@Override 
public void onReceive(Context context, Intent intent) { 
Log.d(TAG, "package: " + intent.getStringExtra("comm")); 
Log.d(TAG, "reason: " + intent.getStringExtra("reason")); 
                Log.d(TAG, "uid: " + intent.getStringExtra("uid")); 
} 
}
```
#### 约束
- 触发系统oom后，可能导致系统异常、重启、broadcast服务异常、系统卡死等，此时可能接收不到广播。
- 对于频繁触发oom kill的进程和容器（1分钟内最多触发6次），不会一直发送广播。
- 客户后台监控程序建议注册到系统服务中，如果使用app，可以通过添加白名单进行保活。 **cmd performance bg-killer -a xxx**
  **cmd performance auto-run -a xxx**
  其中，xxx为应用包名。
  
 
