我想在Android应用程序中实现以下简单模式:
我遇到的问题是步骤3和4.由于C是由B启动的,A如何得到通知?嗯,不确定除了我之外是否对任何人都清楚......
无论如何,现在我遇到了一个解决方案,其中第3步看起来像这样:
3“。活动B将表单内容返回给活动A.然后启动AsyncTask C发布表单并继续照常进行。
但是A似乎有点不必要A也需要处理表格,它应该只是B的责任。还有其他任何想法或解决方案吗?
答案 0 :(得分:2)
我会使用广播接收器。 http://d.android.com/reference/android/content/BroadcastReceiver.html
在活动B中
Intent broadcastIntent = new Intent("com.yourapppackage.BROADCAST");
broadcastIntent.putExtra("myExtras", myExtras.extra); // Put your results in here
sendBroadcast(broadcastIntent);
从AsyncTask的onPostExecute中激活它。
在您的应用程序清单中,为您的活动A条目添加一个意图过滤器 http://developer.android.com/guide/topics/manifest/intent-filter-element.html
<activity android:name=".A"
>
<intent-filter>
<action android:name="com.yourapppackage.BROADCAST" />
</intent-filter>
</activity>
在活动A中注册BroadcastReceiver http://developer.android.com/reference/android/content/BroadcastReceiver.html
// Set up a handler and a broadcast reciever
private final Handler mHandler = new Handler();
private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Handle reciever
String mAction = intent.getAction();
if(mAction.equals("com.yourapppackage.BROADCAST")) {
// Do something with the results - intent.getExtras();
}
}
}
// Register a reciever
IntentFilter myRecieverIntentFilter = new IntentFilter();
myRecieverIntentFilter.addAction("com.yourapppackage.BROADCAST");
this.registerReceiver(mIntentReceiver, myRecieverIntentFilter, null, mHandler);
答案 1 :(得分:1)
答案 2 :(得分:0)
为什么不让B获取运行任务所需的信息,然后将其传递给A? onPreExecute()和onPostExecute()发生在Activity A的主线程中。
没关系,我刚刚在你的描述中看到过。但是 - B处理全部 - 只需将数据提交到URL。