インストールされている他のアプリケーションを起動できる Android アプリケーションがあります。これには、アプリケーションの実行中に常に実行されるバックグラウンド サービスがあります。一部のデバイスでテストすると、カメラ、ギャラリーなどのアプリケーションの起動中にメモリ不足が原因でサービスが停止することがあることに気付きました。 (アルバム)etc...だからやってみた
private boolean isRunningOutOfMemory(){
MemoryInfo memoryInfo = new MemoryInfo();
ActivityManager activityManager = (ActivityManager)getSystemService(Service.ACTIVITY_SERVICE);
activityManager.getMemoryInfo(memoryInfo);
final long appMemeory = Runtime.getRuntime().totalMemory();
final long availableMemory = memoryInfo.availMem / 1048576L;
final long memoryThreshold = ((memoryInfo.threshold * 2) + appMemeory) / 1048576L;
return (availableMemory <= memoryThreshold);
}
条件が true の場合にダイアログを表示しました。このメソッドは常にバックグラウンドで実行されています。また、この条件が正常に機能しない場合があります。つまり、使用可能なメモリがしきい値の 2 倍を超えると、サービスが停止します。
この使用可能なメモリは、起動された他のアプリケーション (私のアプリケーションから起動されたアプリケーション) がない場合、つまり、実行中のアプリケーションが私のものである場合に異なります。
使用可能なメモリがこのように変動する理由は何ですか?
サービスが停止するメモリを見つけることは可能ですか?
この状況を効率的に処理するにはどうすればよいですか?
前もって感謝します