4

我有一个长期运行的服务,用于执行某些后台操作。现在,我已经阅读了几个线程,Android 考虑在 RAM 不足时终止这些服务,因为必须清理一些后台 LRU 缓存以容纳更多页面。所以,我让Android杀死它,并将我的服务数据保存在onTrimMemory回调中(当级别为80时),我希望每次Android杀死我的服务进程之前都能得到这个回调。但是在某些情况下,我在 onTrimMemory 中没有得到任何回调,并且我的进程被杀死,导致数据丢失。

这是我的进程被杀死之前的日志:

06-15 20:43:18.150 17240 17365 I Icing   : Indexing 4C988B73CC982428683ECBAE956EE592EB3D7590 from com.google.android.googlequicksearchbox
06-15 20:43:18.170   888   888 I 
ConfigService: onDestroy
06-15 20:43:18.290 17240 17365 I Icing   : Not enough disk space for indexing trimmable
06-15 20:43:18.360   584   710 I InputReader: Touch event's action is 0x0 (deviceType=0) [pCnt=1, s=0.213 ] when=2010937946000
06-15 20:43:18.360   584   709 I InputDispatcher: Delivering touch to: action: 0x4, toolType: 1
06-15 20:43:18.360   584   709 I InputDispatcher: Delivering touch to: action: 0x0, toolType: 1
06-15 20:43:18.360   584   709 I InputDispatcher: Delivering touch to: action: 0x0, toolType: 1
06-15 20:43:18.390   584  1075 W ActivityManager: Failed setting oom adj of ProcessRecord{4251b490 17777:com.example.gaurav/u0a137} to 13
06-15 20:43:18.390   584  1075 W ActivityManager: Failed setting oom adj of ProcessRecord{4260cf38 16704:android.process.media/u0a24} to 15
06-15 20:43:18.400   584  1075 I ActivityManager: Killing 17971:com.google.android.apps.docs/u0a60 (adj 11): empty,  17028K
06-15 20:43:18.430   584   927 I ActivityManager: Process com.example.gaurav (pid 17777) (adj 11) has died.
06-15 20:43:18.440   584   927 W ActivityManager: Failed setting oom adj of ProcessRecord{4260cf38 16704:android.process.media/u0a24} to 11
06-15 20:43:18.440   584   885 I ActivityManager: Process android.process.media (pid 16704) (adj 13) has died.

我的进程是 com.example.gaurav,在我的进程被杀死之前没有 onTrimMemory 日志。这里的任何人都可以解释这些日志表明什么?我已经用谷歌搜索了,但找不到任何令人信服的东西。关于前台服务解决方案,我想避免这种情况,因为我的服务运行时间很长,并且使其成为前台会消耗大量电池。

@pskink,这是我在服务中的 onTrimMemory 回调方法:

@Override
    public void onTrimMemory(int level) {
        // TODO Auto-generated method stub
        Log.v(LOG_TAG, "on Trim memory callback, level : " + level);
        super.onTrimMemory(level);
        if (level >= TRIM_MEMORY_COMPLETE && UsageSharedPrefernceHelper.isServiceRunning(mContext)) {
            Log.v(LOG_TAG, "Trim memory level is greater than 80, kill service");
                saveDataOnKill();
        }
    }

另外,我有时会收到日志,例如:

06-15 20:43:46.000 18420 18420 V MyService: on Trim memory callback, level : 80

所以,这当然不是没有日志的问题。

4

0 回答 0