当前位置: 代码迷 >> 综合 >> android Contacts/Acore进程经常被Kill,导致联系人开机后丢失怎么办?
  详细解决方案

android Contacts/Acore进程经常被Kill,导致联系人开机后丢失怎么办?

热度:12   发布时间:2024-01-19 17:26:43.0
Contacts/Acore进程,在内存较少和开机进程过多的情况下会经常被 ActivityManager Kill 掉,
导致Sim卡联系人开机后未导入或者只导入一部分,造成联系人丢失的现象,但是重新开机后可以恢复正常。


遇到这样的问题可以采用以下方法提供Contacts/Acore进程的优先级,降低被ActivityManager 杀掉的概率。
 
方法1:
提高进程优先级
        startForeground(1, new Notification());
降低进程优先级
        stopForeground(true); 
NOTICE:
    这个方法可以将对应AP的ADJ临时提高到2。
 
方法2:
找到这个进程对应的AndroidMannifest.xml文件,在其中添加属性『android:persistent="true"』,
这样可以将该进程设置为常驻内存进程,就可以降低被Kill的概率。
以Acore进程为例,
在 /package/providers/ContactsProvider/AndroidMannifest.xml 文件中增加一行『android:persistent="true"』
具体修改示例如下:
   <application android:process="android.process.acore"
             android:label="@string/app_label"
             android:icon="@drawable/app_icon"
             android:allowBackup="false"
             android:persistent="true" <!--新增加代码,保证acore进程不被ActivityManager杀死-->
     >
NOTICE:
    这个方法可以将对应AP的ADJ临时提高到2。
 
    解决发生JE问题(必须合入):
    CallLogProvider.java  (Line1000)
    public static final void notifyNewCallsCount(SQLiteDatabase db, Context context) {
        ... ...
        Log.i(TAG, "[notifyNewCallsCount] newCallsCount = " + newCallsCount);
        //send count=0 to clear the unread icon
        if (newCallsCount >= 0) {
            Intent newIntent = new Intent(Intent.MTK_ACTION_UNREAD_CHANGED);
            newIntent.putExtra(Intent.MTK_EXTRA_UNREAD_NUMBER, newCallsCount);
            newIntent.putExtra(Intent.MTK_EXTRA_UNREAD_COMPONENT, new ComponentName(Constants.CONTACTS_PACKAGE,
                    Constants.CONTACTS_DIALTACTS_ACTIVITY));
// New add for fixed JE
            newIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
// End
            context.sendBroadcast(newIntent);
        ... ...
  相关解决方案