0

そのハンドラーにメッセージを送信するタイマーが必要です。Runnable を実装するクラスを作成し、そのオブジェクトをスレッドの実行可能なコンストラクターにフィードします。スレッドを開始すると、アプリケーションがハングし、明らかに非同期で動作していません。AsyncTask を使用することもできましたが、短期間の操作用に設計されていると聞いたことがありますが、バックグラウンド タイマーはアクティビティの onResumed 状態全体で動作する必要があります。私の間違いを指摘して、Android のスレッドに関する有用なリンクを提供していただけませんか。ありがとう。

ここに私が書いたコードがあります:

@Override
public void onResume() {
    // TODO Auto-generated method stub
    super.onResume();

    _myTimerInstance = new MyTimer(new Handler() {
        @Override
        public void dispatchMessage(Message msg) {
            super.dispatchMessage(msg);
            // ...
        }
    });
    _myThread = new Thread(_myTimerInstance);
    _myThread.run();


}

private static class MyTimer implements Runnable {

    private Handler _myHandler;
    private boolean _activityHasBeenLeft;

    public MyTimer(Handler myHandler) {
        _myHandler = myHandler;
    }

    public void setActivityHasBeenLeft(boolean b) {
        _activityHasBeenLeft = b;
    }

    @Override
    public void run() {
        while (!_activityHasBeenLeft) {
            try {
                Thread.sleep(2000);
                _myHandler.sendEmptyMessage(0);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
4

1 に答える 1

0

Thread.run() ではなく、常に Thread.start() を使用する必要があります。 Thread.run() は通常のメソッド呼び出しと同様で、同じスレッドで実行されます。

使用する

_myThread.start();
于 2012-08-21T22:24:37.420 に答える