2017-09-22 8 views
0

これは、私の理解に従って起こっていないと予想されるものでした。Android Appが終了した後にクラッシュする

私のアプリケーションでは、(2)2-3秒かかるかもしれないAsyncTaskを実行します。そのAsyncTaskでは、UIコントロールの値をほとんど更新しないrunOnUiThread()があります。

アクティビティのfinish()を行う[サインアウト]ボタンをクリックするまで、これは正常に機能します。

findViewByIdがnullを返すNULLポインタ例外が発生しました。更新前にヌルチェックを追加することはできますが、使用されるUI画面とAsyncTaskの量を考慮すると、私は膨大な数のチェックに終わるでしょう。

なぜfinish()が呼び出された後でもUIスレッドがまだ実行されていますか?

このケースに最適な解決策は何ですか? 問題は、AsyncTaskの完了とfinish()の呼び出しとの間に時間差が正確に一致している場合にのみ発生します。

よろしく、

ハルシャ

+1

https://stackoverflow.com/questions/31085406/what-happens-to-running-asynctasks-when-the-activity-changes –

+1

https://stackoverflow.com/questions/2531336/asynctask-wont-stop -venven-when-the-activity-has-destroyed –

+0

ダニエル、そのチケットの情報は、試してみるのに十分な価値があるようです。私は別の視点で検索していました。 – harshal

答えて

1

はAsyncTaskは、それが実行中の仕事が完了するまでバックグラウンドで実行されますので、現在の活動に「完了」を呼び出すと、それを殺すことはありません。 ヌルチェックを追加すると、あなたが言ったように面倒になるので、代わりにfinish()を呼び出す前にasyncTaskをキャンセルすることです。あなたはUIを更新するためにAysncTaskのonPostExecuteメソッドを使用

if (asyncTaskInstatnce != null && !a.isCancelled()) 
    a.cancel(true); 
-1

関連する問題