我有一个活动,让用户上传照片到网络,而不是让他们无限期地等待图像上传,我有它在处理图像上传的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();