特定のバックグラウンド操作を実行するために、長時間実行されているサービスがあります。今、私はいくつかのスレッドを読みました.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
したがって、確かにログがないということではありません。