android -从另一个activity中的asyncTask postExecute重新启动当前activity中的



我有一个活动,让用户上传照片到网络,而不是让他们无限期地等待图像上传,我有它在处理图像上传的asynctask中完成。当用户按下按钮上传图像时,我有上传图像的活动关闭,应用程序回到早期的活动,它有自己的下载过程。我想弄清楚的是在asynctask onPostExecute中做些什么来让下载过程在其他活动中再次运行。我试着用这个:

  @Override
  protected void onPostExecute(String result){
    if(result!=null){
    Main.DownloadManager.startDownloading();
      }else if(result==null){
       Toast.makeText(getBaseContext(),"Upload failed",timetoshow).show();
              }
          }

但是我在主活动中没有得到响应,因为我知道我实际上没有调用正在运行的活动,而只是调用.....方法某个地方没有实例化或运行....或者至少这是我认为它的作用。所以我想我的问题是我如何通过消息运行startdownloads()方法从关闭的活动的asynctask在当前运行的主活动。如有任何帮助,我将不胜感激。

编辑:

我能够通过实现下面的解决方案之一来解决这个问题:

 @Override
  protected void onPostExecute(String result){
    if(result!=null){
    CustomContextClass.*Main*.DownloadManager.startDownloading();
      }else if(result==null){
       Toast.makeText(getBaseContext(),"Upload failed",timetoshow).show();
              }
          }

你可以在DownloadManager

中使用静态方法
private static instance;
public void onCreate() {
    instance = this;
}
public static void startDownloading() {
    instance.downloadNow();
}

onProgressUpdate()的AnsycTask将告诉你关于进度,所以在这里你可以决定你想要发送什么数据到下一个活动。在下一个活动中处理剩余的未下载部分。这取决于服务器端数据块的实现

您的完整需求将需要更多的建议

让进程挂在死Activity上是很危险的,因为它很有可能导致泄漏。为什么不在您打算显示进度的活动中启动AsyncTask ?那就更有意义了

你可以做下面的事情,如果我没弄错的话,我认为AsyncTask已经写了DownloadManager类。我希望你把AsyncTask写成一个类似于这个类的InnerClass。

private class InitTask extends AsyncTask<String, String, String> {....

你还应该有一个getter来返回InitTask对象,

public InitTask getInitTask(){
    return new InitTask();
}

那么在另一个类中,你可以像下面这样调用

new YourOtherClass().getInitTask().execute();

最新更新