私はこの例を使用しています:
Android-AsyncTaskのタイムアウトを設定しますか?
次のように:
al.setOnClickListener(new OnClickListener(){
public void onClick(View w)
{
final AlogLoader loader = new AlogLoader();
loader.execute();
Handler handler = new Handler();
handler.postDelayed(new Runnable()
{
public void run()
{
if(loader.getStatus() == AsyncTask.Status.RUNNING)
{
loader.cancel(true);
}
}
}, 1);
}
});
「1」に設定したのは、起動する前に実際に停止できるかどうか、つまりハンドラーが機能しているかどうかを確認したかったためです。実際には、おそらく15000(15秒)に設定します。
しかし、何が起こるかは混乱を招きます。
アプリケーションを実行すると、onPreExecute()がロード画面を描画しますが、これは決して終了しないため、ユーザーにはロード画面が永続的に表示されます。
loader.cancel(true)->にブレークポイントを設定してデバッガーで実行すると、デバッガーはその行で停止します。これは、1ミリ秒しか実行できないために予想されます。しかし、その後デバッガーで再開ボタンを押すと、onPostExecute()が呼び出されます...どうしてそれが可能ですか?
明らかに、私は非同期タスクのタイムアウトに非常に慣れていません-いくつかの調査の後、上記の例を見つけました、そしてそれは間違いなくloader.get(15000、TimeUnit.MILLISECONDS);よりも私にとって最も理にかなっているようでした。 UIスレッド。
どんな助けでもありがたいです...プロセスの説明さえ。