在Android中杀死/停止重复的线程

时间:2013-06-26 11:16:41

标签: multithreading android-activity duplicates

我似乎无法找到这个问题的答案。我有以下内容,我有一个活动产生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();

感谢。

1 个答案:

答案 0 :(得分:0)

将对线程的引用存储在实例变量中:

private Thread myWorker;

onResume()中检查线程是否正在运行,如果没有,请创建一个新线程并启动它。

请注意,Android对电源和内存消耗的策略非常严格,因此您的应用程序可能会在任何时候被杀死,包括您的线程。此外,活动应该能够随时暂停和停止。暂停或停止活动时,请确保您的线程已正确停止。

因此,进行长期计算的最佳方法是使用Service类而不是Activity。您仍然需要为您的工作创建不同的线程,但生命周期稍微放松一些。

<强>参考文献: