0

Android 4.4 プロジェクトを作成しています。私は持っていNetworkOnMainThreadExceptionます。以下は私のプロセスです。

Service(sticky) -> Handler(per 5 minutes) -> Runnable -> HttpPost

Runnable は別のスレッドではありませんか? Runnable で AsyncTask を使用する必要がありますか?

4

2 に答える 2

12

Runnable は単純なインターフェースであり、Java のドキュメントによると、「インスタンスがスレッドによって実行されることを意図している任意のクラスによって実装される必要があります」。(私のものを強調してください。)

たとえば、Runnable を次のように定義すると、作成されたのと同じスレッドで単純に実行されます。

new Runnable() {
    @Override
    public void run() {
        Log.d("Runnable", "Hello, world!");
    }
}.run();

ここで実際に行っていることは、クラスを作成し、そのパブリック メソッドを実行していることに注意してくださいrun()。ここには、別のスレッドで実行する魔法はありません。もちろんありません。Runnable は、たった3 行のコードのインターフェースです

これを Thread の実装 (Runnable を実装) と比較してください。

new Thread() {
    @Override
    public void run() {
        Log.d("Runnable", "Hello, world!");
    }
}.start();

ここでの主な違いは、Thread のstart()メソッドが、新しいスレッドを生成し、その中で Runnable を実行するためのロジックを処理するrun()ことです。

Android の AsyncTask は、スレッドの実行とメイン スレッドへのコールバックをさらに容易にしますが、概念は同じです。

于 2014-03-22T16:41:31.863 に答える
4

RunnableそれだけではありませThread。を使用しRunnableて 内で実行できますThreadが、これらは異なる概念です。を使用することも、AsyncTask単に定義してそれThreadを使用することもできます.start()

于 2014-03-22T16:34:28.583 に答える