我正在开发一个开源应用程序(droidwall fork),我遇到的问题之一是当系统重新启动时iptables规则未正确应用.它适用于大多数
Android版本.但是在某些特定的ROMS(CM 10.1)上,它提供了以下logcat
12-26 08:39:27.116 I/ActivityManager(582): No longer want dev.ukanth.ufirewall (pid 2297): empty #17
我的代码工作如下,
private Handler mHandler = new Handler(Looper.getMainLooper()); @Override public void onReceive(final Context context,final Intent intent) { if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { if (Api.isEnabled(context.getApplicationContext())) { final Handler toaster = new Handler() { public void handleMessage(Message msg) { if (msg.arg1 != 0) Toast.makeText(context,msg.arg1,Toast.LENGTH_SHORT).show(); } }; mHandler.post( // Start a new thread to enable the firewall - this prevents ANR new Runnable() { @Override public void run() { if (!Api.applySavedIptablesRules(context.getApplicationContext(),false)) { // Error enabling firewall on boot final Message msg = new Message(); msg.arg1 = R.string.toast_error_enabling; toaster.sendMessage(msg); Api.setEnabled(context.getApplicationContext(),false,false); } } }); // Start a new thread to enable the firewall - this prevents ANR } /*Intent i = new Intent(context,StartupService.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startService(i);*/ }
你可以找到我的Api.java类here.
解决方法
12-26 08:39:27.116 I/ActivityManager(582): No longer want dev.ukanth.ufirewall (pid 2297): empty #17
此日志表示您已达到允许的最大空进程. (16是您的最大值)
更多关于empty processes的android doc:
A process that doesn’t hold any active application components. The only reason to keep this kind of process alive is for caching purposes,to improve startup time the next time a component needs to run in it. The system often kills these processes in order to balance overall system resources between process caches and the underlying kernel caches.
因此,不确定您的日志与您的iptables规则问题直接相关.