android – 如果反复启动停止,为什么AsyncTask无法启动?

android – 如果反复启动停止,为什么AsyncTask无法启动?,第1张

概述所以,我一直在我的游戏中调试一个问题,如果我开始然后反复停止它,我注意到有时Asynctask似乎没有开始,即使我似乎做正确的事情让它开始.我删除了很多不必要的代码来显示会发生什么,但基本上我看到我即将启动Asynctask,但任务永远不会开始. public void onStart(){ super.onStart(); Log.d(TAG,"About to execute 所以,我一直在我的游戏中调试一个问题,如果我开始然后反复停止它,我注意到有时Asynctask似乎没有开始,即使我似乎做正确的事情让它开始.我删除了很多不必要的代码来显示会发生什么,但基本上我看到我即将启动Asynctask,但任务永远不会开始.

public voID onStart(){    super.onStart();    Log.d(TAG,"About to execute");    Play_level.execute();}AsyncTask<VoID,Integer,Integer> Play_level=new AsyncTask<VoID,Integer>(){     protected voID onProgressUpdate(Integer ...time) {            //Stuff goes in here.     }    @OverrIDe    protected Integer doInBackground(VoID... params) {        Log.d(TAG,"In Task");    }};

logcat显示:

03-10 19:28:16.983: D/Level(1535): About to execute03-10 19:28:17.503: D/Level(1535): onStop()03-10 19:28:17.993: D/Level(1535): onPause()03-10 19:28:19.174: D/AJEG(1535): Starting Tongue03-10 19:28:19.313: D/Level(1535): ImageList PrevIoUsly Loaded03-10 19:28:19.313: D/Level(1535): About to execute03-10 19:28:19.853: D/Level(1535): onStop()03-10 19:28:20.283: D/Level(1535): onPause()03-10 19:28:21.464: D/AJEG(1535): Starting Tongue03-10 19:28:21.604: D/Level(1535): ImageList PrevIoUsly Loaded03-10 19:28:21.604: D/Level(1535): About to execute03-10 19:28:22.134: D/Level(1535): onStop()03-10 19:28:22.404: D/Level(1535): onPause()03-10 19:28:23.504: D/AJEG(1535): Starting Tongue03-10 19:28:23.644: D/Level(1535): ImageList PrevIoUsly Loaded03-10 19:28:23.644: D/Level(1535): About to execute03-10 19:28:24.184: D/Level(1535): onStop()

此外,重新进入任务的数量似乎无法重新启动代码,如最后一段文本所示.

只是为了给出更多的上下文,在父活动(AJEG)的onStart()中播放Starting Tongue,Level是我正在开始的活动的名称.可以安全地忽略ImageList命令,但我已将其包含在内以保证完整性.部分doInBackground包含文本“Starting Level _”,其中_是即将启动的级别. onStop()和onPause()在方法中显示何时在Level任务中发生onStop()和onPause().

解决方法 因此,该问题的解决方案如 this blog article所述:

AsyncTask uses a static internal work queue with a hard-coded limit of
10 elements

所以,基本上我有一个从未完成的AsyncTask,通过重新启动我的线程这么多来达到10.为了解决这个问题,我做了以下事情:

>我将AsyncTask转换为一个类,并确保只有一个实例正在运行,正如mah所建议的那样.
>我在onStop()命令中取消了该任务,正如Mike D在评论中所建议的那样.
>我确保检查是否在doInBackground中取消了ASyncTask.

结果是这样的:

private LevelPlay Play_level;public voID onStop(){    super.onStop();    Play_level.cancel(true);}public voID onStart(){    super.onStart();    Play_level=new LevelPlay();    Play_level.execute();}class LevelPlay extends AsyncTask<VoID,Integer>{     protected voID onProgressUpdate(Integer ...time) {     }    @OverrIDe    protected Integer doInBackground(VoID... params) {        Log.d(TAG,"In Task");            Boolean keepRunning=true;        while(keepRunning && !isCancelled ())        {                 //DoStuffhere        }     }}
总结

以上是内存溢出为你收集整理的android – 如果反复启动/停止,为什么AsyncTask无法启动?全部内容,希望文章能够帮你解决android – 如果反复启动/停止,为什么AsyncTask无法启动?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1122880.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存