Pea*_*oto 3 multithreading android android-asynctask
所以,我一直在我的游戏中调试一个问题,如果我开始然后反复停止它,我注意到有时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, Integer>(){
protected void onProgressUpdate(Integer ...time) {
//Stuff goes in here.
}
@Override
protected Integer doInBackground(Void... params) {
Log.d(TAG,"In Task");
}
};
Run Code Online (Sandbox Code Playgroud)
logcat显示:
03-10 19:28:16.983: D/Level(1535): About to execute
03-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 Tongue
03-10 19:28:19.313: D/Level(1535): ImageList Previously Loaded
03-10 19:28:19.313: D/Level(1535): About to execute
03-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 Tongue
03-10 19:28:21.604: D/Level(1535): ImageList Previously Loaded
03-10 19:28:21.604: D/Level(1535): About to execute
03-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 Tongue
03-10 19:28:23.644: D/Level(1535): ImageList Previously Loaded
03-10 19:28:23.644: D/Level(1535): About to execute
03-10 19:28:24.184: D/Level(1535): onStop()
Run Code Online (Sandbox Code Playgroud)
此外,重新进入任务的数量似乎无法重新启动代码,如最后一段文本所示.
只是为了给出更多的上下文,在父活动(AJEG)的onStart()中播放Starting Tongue,Level是我正在开始的活动的名称.可以安全地忽略ImageList命令,但我已将其包含在内以保证完整性.部分内容doInBackground包括文本"Starting Level _ ",其中_是即将开始的级别.onStop()和onPause()在方法中显示Level任务的时间onStop()和onPause()发生时间.
因此,该问题的解决方案如本博客文章所述:
AsyncTask使用静态内部工作队列,其硬编码限制为10个元素
所以,基本上我有一个从未完成的AsyncTask,通过重新启动我的线程这么多来达到10.为了解决这个问题,我做了以下事情:
doInBackground.结果是这样的:
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, Integer>
{
protected void onProgressUpdate(Integer ...time) {
}
@Override
protected Integer doInBackground(Void... params) {
Log.d(TAG,"In Task");
Boolean keepRunning=true;
while(keepRunning && !isCancelled ())
{
//DoStuffHere
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2294 次 |
| 最近记录: |