0

私のアプリケーションはランチャーのように機能します。アプリケーション内からアプリが起動されると、一定時間だけプレイできるタイマーが開始されます。ただし、ランチャーに戻った場合は、タイマーを一時停止してから、別のアプリを起動すると再び開始するようにします. 私は次のものを持っています:

    protected String doInBackground(String... strings) {
        while (playTime < ALLOWED_TIME) {
            try {
                Thread.sleep(1000);
                long endTime = System.nanoTime() / Constants.NANO_SECONDS;
                int endTimeSec = (int) endTime;
                playTime = endTimeSec - START_TIME;

                if (stored.getBoolean("Foreground", false)) {
                    break;
                    cancel(true); //run this code if Arcade app is exited before time expires
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return null;
    }

編集:バックグラウンドタスクを適切にキャンセルするには、コードの抜粋を並べ替える必要があることが判明したため、回答を参照してください。

4

1 に答える 1

0

投稿されたコードを参照すると、次のコード スニペットは、バックグラウンド スレッドと、バックグラウンドで発生する関連ループを効果的にキャンセルします。

if (true) {
    cancel(true); //this code cancels the background thread, breaks the loop therein
    break;
}

protected void onCancelled(){
    //anything to be run on main thread after cancellation
}
于 2013-10-10T14:19:16.360 に答える