我有一个应用程序,当一个“游戏”统计时,它启动了几个不同的线程。我开始线程像这样:多线程的好习惯
Thread thread = new Thread(new Runnable()
{
public void run()
{
//...
}
});
thread.setName("killMeAtEnd");
thread.start();
当游戏结束时,我有游戏内一个dispose()方法,整理着所有正在运行的线程,结束全部有名为“killMeAtEnd”的主线之后。我的问题是,这是一个好的做法吗?我的目的是保持我的应用程序运行快速和杂乱无章,以我的经验来看,留下“悬挂”的线程往往会拖慢手机,直到应用程序终止。有一个更好的方法吗?这是否值得打扰?
编辑:
这是我dispose()
如果有人有兴趣。此代码在类游戏中。
public void dispose()
{
Thread threads[] = (Thread[])Thread.getAllStackTraces().keySet().toArray();
for(int x=0;x<threads.length;x++)
{
Thread thread = threads[x];
if(thread.getName().equalsIgnoreCase(KILL))
{
try
{
thread.interrupt();
}catch(Exception e){Log.e(Viewer.GAME,Log.getStackTraceString(e));}
thread = null;
}
}
}
public static final String KILL = "endOnDispose";
获取堆栈跟踪相当昂贵,因此如果在创建线程并将其设置为“处理(线程[]线程)'时保存'线程[]''会更有效。是否有其他线程在游戏结束时继续运行,或者是为了防止您终止UI线程? – zapl 2012-03-21 01:51:04
当“游戏”结束时,“活动”未完成,它会转到其他位置。 – John 2012-03-21 01:56:35