Google が AsyncTask のスレッド モデルを再設計したことを発見した後、ブロック コードの重大なバグが発生したため、AsyncTask の使用を中止し、単純に Threads と Runnables を使用することにしました。私の議論ではありません。私が知りたいのは、UI スレッドで何かを実行する入れ子になった Runnable を実装する正しい方法が次のとおりかどうかです。
private class MyOuterRunnable implements Runnable
{
@Override
public void run()
{
int x = 1;
// Do something on the UI thread.
runOnUiThread(new Runnable()
{
public void run()
{
// Update a listview, etc.
}
});
}
}
ほとんどの場合、これは機能しているように見えますが、この方法で実行した特定のモジュールでクラッシュが発生しています。これは、ネストされた Runnable 内から UI を実行する適切な方法ですか、それとも別の方法で行う必要がありますか? LogCat が教えてくれるのは、ネストされたランナブルで致命的なエラーが発生したことだけですが、詳細な情報は提供されません。