1

メインActivityクラス、ブロードキャスト クラス (ブロードキャスト レシーバーのサブクラス)、および他のいくつかのクラスがあります。Handler将来行ういくつかのことのために、ブロードキャストクラスで作成されたを使用します。しかし、何らかの状況が発生した場合(ユーザーがアプリを終了したい場合)、それHandlerをキャンセルしたい(実行されないようにしたい)。

キャンセル方法について SO で多くのスレッドを読み、同じHandlersクラス ( など) からの方法を知っています。しかし、私は自分からそれをキャンセルする方法がわかりません。(ユーザーが終了ボタンを押し、ハンドラーが何らかの作業を行う場合は、それを防ぎたい)。Handler.removeCallback (Runnable )Handler.removeMessages(0)Activity

Activityでは、クラスからそのハンドラー オブジェクト (実行される) を参照するにはどうすればよいでしょうか。

4

1 に答える 1

0

あなたの質問を完全に理解しているかどうかはわかりませんがHandler、アクティビティ経由でキャンセルしたい場合は、メソッドに入れることができますonPause

@Override
public void onPause() {
    super.onPause();
    handler.removeCallbacks(runnable);
}

このonPauseメソッドは、アクティビティがユーザーから隠されようとしているときに呼び出されます。

質問を読み直して、BroadcastReceiverクラスからクラス内のハンドラーにアクセスしたいActivity場合は、ハンドラーをアクティビティのメンバー変数にする必要があります。

public class MyActivity extends Activity {

    private Handler mHandler = new Handler();

    public class BroadcastReceiver mReceiver = new BroadcastReceiver() {

        public void onReceive (Context context, Intent intent) {
            // ... use mHandler in here ....
            mHandler.postDelayed(runnable, 1000);
        }

    }

    // ... rest of the code ...

    @Override
    public void onPause() {
        super.onPause();
        handler.removeCallbacks(runnable);
    }

}

BroadcastReceiverを使用して、Activityクラス内でハンドラーを使用できますmHandlerBroadcastReceiverクラスがの内部クラスでないことを確認する必要があります。staticActivity

于 2013-01-06T14:44:17.370 に答える