0

コードスニペット:

Handler handler= new Handler();
handler.postDelayed(networkRunnable,
                10000);

/**
 * A runnable will be called after the 10 second interval
 */
Runnable networkRunnable= new Runnable() {
    @Override
    public void run() {
        //Not fired if I quit the app before 10 seconds after 1 second. 
    }
};

10 秒後にトリガーするようにハンドラー ポストの遅延を設定します。1 秒から 10 秒の間にアプリを終了すると、run メソッドは呼び出されませんでした。

これについて私を助けてください。

前もって感謝します。

4

2 に答える 2

2

Android ランタイムはプロセスの有効期間を積極的に管理し、プロセスのエントリ ポイントが閉じられると (たとえば、最後のアクティビティが終了すると)、プロセスを破棄します。そうは言っても、上記のコードが追加のロジックなしでコールバックを確実に実行する実行環境を私は知りません。

コールアウトを確実に発生させたい場合は、Service を Android コアに登録し、サービス スレッドの Handler を使用してコールアウトをスケジュールする必要があります。Android は (通常) サービスを実行し続け、コールアウトは後で実行されます。次に、コールアウトでサービスの登録を解除して、システム リソースを解放する必要もあります。

于 2015-05-23T15:17:22.407 に答える
0

これを実現するために、ハンドラーの代わりに AlarmManager を使用しました。現在は動作しています。これは、使用しているコードの抜粋です。

@Override   
protected void onHandleIntent(Intent intent) {
    Log.d(Constants.TAG, "onHandleIntent");
    ...
    restartService();
    Log.d(Constants.TAG, "finish");   
}

private void restartService() {
   AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
   Intent queryIntent = new Intent(context, ServiceClass.class);
   PendingIntent pendingQueryIntent = PendingIntent.getService(context, 0, queryIntent,
    PendingIntent.FLAG_UPDATE_CURRENT);
    // schedule the intent for future delivery
    alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + Constants.RESTART_TIME, pendingQueryIntent);
}

このようにして、ユーザーがホーム、戻る、または最近のアプリからスワイプしてアプリを閉じても、サービスを再起動できます。機能を停止する唯一の方法は、ユーザーがアプリを強制的に停止することです。

それが役に立てば幸い

于 2015-11-20T19:13:13.533 に答える