从Android中的Activity生成一个线程需要有关重新分解的建议

时间:2012-02-13 19:56:10

标签: android multithreading notifications

我开发了一个文件下载程序,显示通知栏中的进度(如Android Market下载)。我的工作基于on this example

在我的活动中,我启动了一个像

这样的下载线程
private void startDownload() {
         DownLoadFileHandler filedownLoad = new DownLoadFileHandler(this, getIntent().getDataString(),mDirectory,mFileName.getText().toString(),mHandler);
         filedownLoad.downloadfile();
             finish();  //End the Spawning activity
    }

在下载主题中运行功能

public void run()
{
    try
    {
       //do some pre processing 
       setupNotification();
       //while downloading keep updating notification with flag FLAG_ONGOING_EVENT
       Once Download is complete change the flag FLAG_AUTO_CANCEL and update for the final
       time
     }
     catch (Exception e) {
    if(notificationManager != null)               
              notificationManager.cancel(DOWNLOAD_NOTIFICATION);
     }
}

现在我注意到,当我下载文件时,如果我拨打/接听电话需要相当长的时间(在同时不支持呼叫和网络的2g网络上),线程会消失,消失并且我的通知不完整的下载仍然停留在通知栏中的正在进行的通知中,只能在重新启动时清除。

我觉得我已经从一个Activity(当时在应用程序中唯一的活动)中生成了一个线程,然后在它上面调用finish是我的错误。所以我需要重新考虑代码。

我的问题是我在这种方法中做错了什么(因为如果没有通话,下载似乎与通知更新有关)

如上所述,解决问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

对于像文件下载这样的长时间运行操作,即使您的“活动”不在前台,也要继续运行,您应该考虑使用Service代替。