0

バックグラウンド ワーカー スレッドを使用する Android アプリに取り組んでいます。アクティビティからスレッドにメッセージを送信できるようにする必要がありますが、よくわかりません。

バックグラウンドで作業を行うための 1 つのアクティビティと 1 つのスレッドがあります。スレッドを開始し、必要に応じてメッセージ (引数、オブジェクトなど) を送信できるようにしたいと考えています。(アクティビティのハンドラーをスレッドに渡し、それを使用してメッセージを送信することにより) スレッドからアクティビティにメッセージを送信する方法をマスターしましたが、アクティビティからスレッドにメッセージを送信しようとすると、アプリがクラッシュします。

オンラインで見つけた 10 ~ 12 の優れたチュートリアルに従ってみましたが、それらはすべて別の方法で行われているように見えましたが、まだ正しく機能していません。誰かが私を正しい方向に向けてもらえますか?

簡単なアクティビティの例:

import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savesInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    private void doWork() {
        Worker worker = new Worker();
        worker.start();

        worker.handler.sendEmptyMessage(0);
    }
}

簡単なスレッドの例:

import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;

public class Worker extends Thread {
    public Handler handler;

    public void run() {
        Looper.prepare();

        handler = new Handler() {
            public void handleMessage(Message msg) {
                Log.d("Worker.run()", "Got message saying " + msg.what);
            }
        };

        Looper.loop();
    }
4

1 に答える 1

1

使用方法を読む必要があり、それは最初にルーパーであり、最後にルーパーを停止することを忘れないでください Goodluck

public class Worker extends Thread {
    public Handler handler;
@Override
public run() {
    Looper.prepare();
//initialization will take a little time you if you want to send message check if handler  != null
    handler = new Handler() {
        public void handleMessage(Message msg) {
            Log.d("Worker.run()", "Got message saying " + msg.what);
        }
    };

    Looper.loop();
}

public void sendMessage(Message m)
{ 
    while(handler == null);
    handler.sendMessages(m); 
}
于 2012-12-02T08:01:12.470 に答える