由于Dialer包含两个进程,会有以下问题:
1 Application会执行两次,要注意
2 Phone进程无法调用ContactManager查询通讯录信息
3 要将获取SharedPreference的MODE设置为: MODE_MULTI_PROCESS 。其值为4(2.3以后有该属性)。如: getSharedPreferences("test_aa", MODE_MULTI_PROCESS);.如果是使用MODE_PRIVATE这种模式,那么另一个进程中写入的值,将不会写到文件中。
由于在Application里注册了一些监听器,为了防止多进程注册多次,需要:
获取当前的进程名称:
private String getCurProcessName(Context context) { int pid = android.os.Process.myPid(); ActivityManager mActivityManager = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); for (ActivityManager.RunningAppProcessInfo appProcess : mActivityManager .getRunningAppProcesses()) { if (appProcess.pid == pid) { return appProcess.processName; } } return ""; }
过滤掉其他进程:
if (!getPackageName().equals(getCurProcessName(this))) { if (DialerConfig.DEBUG) LogUtil.d(TAG, "current process is not dialer"); return; }