4

特定のバックグラウンド操作を実行するために、長時間実行されているサービスがあります。今、私はいくつかのスレッドを読みました.RAMが少ない場合、より多くのページに対応するためにバックグラウンドLRUキャッシュを少しクリアする必要があるため、Androidはこれらのサービスを強制終了することを検討しています. そのため、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: トリム メモリ コールバック、レベル: 80

したがって、確かにログがないということではありません。

4

0 に答える 0