2016-08-19 8 views
0

「スタック」にある解決策をいくつか試してみましたが、何も助けてくれませんでした。これは問題です: 私は1 GBのRAMを持つAsus Memopad 8タブレットを持っています。それは "KitKat"を実行します。基本的には約200 MBの空きRAMがあります。 そのタブレットでは、現在実行中のフォアグラウンドアプリケーションを監視するサービスを作成しようとしています。選択した特定のアプリケーションの場合は、特定の操作を行います。問題は、私のタブレットがを寝ている​​間に私のサービスは、Androidのによって殺されていることであるAndroidサービスで私のサービスが殺され続けています

ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
    List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 
    ComponentName componentInfo = taskInfo.get(0).topActivity; 
    return componentInfo.getPackageName(); 

:エッセンスサービスで (IntentServiceを拡張)はこの2秒ごとに行います。だから、私は私のサービスを開始、それは大丈夫動作します。私は私のタブレットを使用して終了したら、私はそれを離れて置く。数時間後にもう一度私のタブレットを使います - サービスはなくなりました。それを置いて数分後に私のタブレットを使用すると、サービスはまだ動作します。

私はこれを試してみました:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    super.onStartCommand(intent, flags, startId); 
    return START_REDELIVER_INTENT; 
} 

私も運なし "START_STICKY" を試してみました。

Androidのサービスを無効にするにはどうすればよいですか?私はそれがすべての時間を実行する必要があり、私のステータスバーに永続的な通知を入力したくないユーティリティサービスのように "foregroundService"としてそれを実行したくないです。サービスが正しいフォアグラウンドアプリを実行していることを検出したとき、私はすでに通知を受けています。

+0

wakelockを試してみてください – Ayaanp

答えて

0

だから、Prokash Sarkerからソリューションは、優れたものを改善したが、決定的な解決策ではありませんでした。

RAMが不足しても私のサービスがアクティブになることを確実にする決定的な解決策(覚えておいて、私のデバイスは合計で1 GBしかありません)はhereです。

私は基本的に私のサービスがオフになってから2秒後に再起動されることを確認する "アラーム"を実装しました。また、「アラームサービス」から送信されたインテントを認識できるように、意図に「余分な」ものを追加しました。 Androidのサービスはシングルトンであるため、既に実行中の場合は「アラーム」が別のサービスを開始しません。

1

BroadcastReceiverを作成して、電話で殺された直後にサービスを起動することができます。あなたのonDestroyで

()サービスクラスで方法、BroadcastReceiverカスタムを開始し、

@Override 
public void onDestroy() { 
Intent in = new Intent(); 
    in.setAction("immortal_service"); 
    sendBroadcast(in); 
} 

、マニフェストファイルにServiceDestroyReceiverを

<receiver android:name=".ServiceDestroyReceiver" > 
     <intent-filter> 
      <action android:name="immortal_service" > 
      </action> 
     </intent-filter> 
    </receiver> 
BroadcastReceiverを登録
クラスは、KI取得後にサービスを開始しますlled、

@Override 
public void onReceive(Context context, Intent intent) { 
    // start the service again here 
} 
+0

はい、良いアイデア!私はそれを試みます。 – guest86

関連する問題