我似乎无法找到这个问题的答案。我有以下内容,我有一个活动产生8个线程来做某些事情,这些线程需要在活动关闭时保持活动状态。我遇到的问题是,当我再次打开活动时,它会产生同一个线程的另一个实例。
我在eclipse中使用DDMS来验证是否正在生成线程的多个副本,我还有一个toast消息,它每秒输出一次线程的ID以验证是否确实有两个线程副本在运行。< / p>
所以我的问题是,如何避免线程的多个实例运行或如何杀死旧实例?
其中一个主题的示例如下。
new Thread(new Runnable()
{
public void run()
{
while(true)
{
DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); // This is where we read the global date and time into our string
currentDateTimeString = df.format(new Date());
DateFormat womm = new SimpleDateFormat("mm"); // This is where we read the minute of the wait one minute into our string
WOMMinString = womm.format(new Date());
DateFormat womh = new SimpleDateFormat("hh"); // This is where we read the hour of the wait one minute into our string
WOMHourString = womh.format(new Date());
DateFormat cds = new SimpleDateFormat("dd"); // This is where we read the current day into our string
currentDayString = cds.format(new Date());
DateFormat cms = new SimpleDateFormat("MM"); // This is where we read the current month into our string
currentMonthString = cms.format(new Date());
DateFormat cys = new SimpleDateFormat("yyyy"); // This is where we read the current year into our string
currentYearString = cys.format(new Date());
try
{
Thread.sleep(1000);
}
catch (InterruptedException e1)
{
appendLog("Could not sleep the thread (Main 2) " + currentDateTimeString + "");
}
}
}
}).start();
感谢。
答案 0 :(得分:0)
将对线程的引用存储在实例变量中:
private Thread myWorker;
在onResume()
中检查线程是否正在运行,如果没有,请创建一个新线程并启动它。
请注意,Android对电源和内存消耗的策略非常严格,因此您的应用程序可能会在任何时候被杀死,包括您的线程。此外,活动应该能够随时暂停和停止。暂停或停止活动时,请确保您的线程已正确停止。
因此,进行长期计算的最佳方法是使用Service
类而不是Activity
。您仍然需要为您的工作创建不同的线程,但生命周期稍微放松一些。
<强>参考文献:强>