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无法启动?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)