我有一项活动,允许用户将照片上传到网络,而不是让他们无限期地等待图片上传,而是让我们在处理图片上传的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();
}
}
但是我在主要活动中没有得到任何回应,因为我知道我实际上并没有调用正在运行的活动,只是调用方法.....某个地方没有实例化或正在运行....或者至少那就是我认为这个确实。所以我想我的问题是我如何传递消息来从当前运行的Main活动中关闭活动的asynctask运行startDownloading()方法。任何帮助都会非常感激。
编辑:
我能够通过实施以下解决方案之一来解决这个问题:
@Override
protected void onPostExecute(String result){
if(result!=null){
CustomContextClass.*Main*.DownloadManager.startDownloading();
}else if(result==null){
Toast.makeText(getBaseContext(),"Upload failed",timetoshow).show();
}
}
答案 0 :(得分:1)
您可以在DownloadManager中使用静态方法
private static instance;
public void onCreate() {
instance = this;
}
public static void startDownloading() {
instance.downloadNow();
}
答案 1 :(得分:1)
AnsycTask的onProgressUpdate()将告诉您进度。在这里,您可以决定要将哪些数据发送到下一个活动。在下一个活动处理剩余的未下载部分。认为取决于服务器端数据块的实现。
您需要完整的要求才能获得更多建议。
答案 2 :(得分:1)
让活动在死活动中徘徊是危险的,因为它很有可能导致泄漏。为什么不在您打算显示进度的活动中启动AsyncTask
?这将是最有意义的。
答案 3 :(得分:1)
你可以做下面的事情,如果我没有弄错,我认为AsyncTask
写了DownloadManager
类。
我希望您在该类中将AsyncTask
写为与此类似的InnerClass。
private class InitTask extends AsyncTask<String, String, String> {....
此外,你必须有一个getter来返回InitTask对象,
public InitTask getInitTask(){
return new InitTask();
}
所以在其他课程中,你可以这样调用,
new YourOtherClass().getInitTask().execute();