我目前有一个thread/AsyncTask
,我从Activity A
开始。在开始AsyncTask
之前,Activity A
会创建一个接收Activity A's
Context
的对象,以便它可以实例化NotificationCompat.Builder
。该对象使用此构建器来显示/显示通知。
然后在创建并启动AsyncTask
时将此对象传递给AsyncTask。这允许AsyncTask
更新对象(和通知)及其进度。
启动AsyncTask
后,Activity A
会调用finish()
,并启动启动它的活动Activity B
。我现在想要发生的是,一旦AsyncTask表示100%完成,该对象就会发送/尝试向Activity B
发送消息。我怎样才能做到这一点?
PS:让我知道图片是否会使场景更清晰。
答案 0 :(得分:2)
据我了解,您的问题Activity A
是从Activity B
开始的。您可以通过startActivityForResult
从B开始A然后在AsyncTask启动时完成A finish()
当AsyncTask加载100%任务并将结果发送到A时。您可以实现回调接口将结果发送到Activity一个来自AsyncTask。现在使用finish()
将setResult()
调用到活动A,并将意图中的结果传递给活动B.
答案 1 :(得分:0)
您可以使用AsyncTask的onPostExecute()方法。
private class DownloadFilesTask extends AsyncTask<Void, Void, MyObject> {
protected Void doInBackground(Void... params) {
//do whatever you need to do
}
protected void onPostExecute(MyObject myObject) {
myObject.sendMessage(activityB);
}
}
请注意,onPostExecute()在主UI线程上运行,因此它将能够处理UI更新。
答案 2 :(得分:0)
键入我自己的答案,因为这是我的问题评论中发生的讨论结果,所以我对解决方案所做的工作有了全面的概述。
我最终接受了生锈的大脑建议的回调。值得注意的是,我指的是使用android.os.Handler
来创建回调,而不是通常用于按钮之类的回调模式。无论如何,在解决方案上。
第1步是在Activity B
中设置处理程序:
messageHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
refreshList();
}
};
handleMessage中的任何内容都是在将消息发送给处理程序时调用的内容。
第2步是将android.os.Messenger
对象发送到Activity A
。这可以通过用于启动Intent
的{{1}}轻松完成:
Activity A
现在,Intent intent = new Intent(AlbumGalleryActivity.this, CreateNewPhotoHuntActivity.class);
intent.putExtra("callbackMessenger", new Messenger(messageHandler));
startActivityForResult(intent, Constants.REQUEST_CREATE_NEW_PHOTO_HUNT);
发送的所有邮件都会转到我们的android.os.Messenger
。
步骤3,最后一步是从android.os.Handler
创建一个android.os.Message
,可以将其发送回处理程序。在我的问题的上下文中,这是在控制更新通知进度的对象内部完成的:
android.os.Messenger
所以,是的。如果您有Q,或者您发现我发布的错误,请随时发表评论。此外,我认为使用if(totalProgress >= 100) {
notificationBuilder.setContentText("Upload complete! ");
notificationBuilder.setSmallIcon(R.drawable.ic_done_black_24dp);
notificationBuilder.setProgress(0, 0, false);
notificationManager.notify(1, notificationBuilder.build());
Message msg = Message.obtain();
msg.arg1 = 1;
try {
callbackMessenger.send(msg);
}
catch (android.os.RemoteException e1) {
Log.d(Constants.UploadProgressNotificationTag, e1.toString());
}
}
也可以解决这个问题,但这需要更多的时间/精力来实现。感谢所有提出解决方案的人!