我正在使用这个例子:
通过以下方式:
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); 更有意义,因为那会阻塞用户界面线程。
任何帮助表示赞赏......甚至是对过程的解释..