我有两个活动:一个是主要的(A),另一个是从A启动的(B)。我使用
我知道我可以通过
据我所读,没有很多选项可以实现这一点。我可以使用SharedPreferences,但那样我还需要某种事件来通知A它必须读取一个值!
任何想法都欢迎。
------最终解决方案------
最后,我得到了@Nathaniel Waggoner的建议,谢谢他。这是我做的:
在我的活动中,我声明了
startActivityForResult(intent, id)
启动B。我知道我可以通过
setResult()
方法将结果发送回A,但据我所知,在调用finish()
之前,结果不会被发送。我需要从B向A发送数据而不关闭B(甚至在关闭之前多次发送)。有没有办法实现这一点?据我所读,没有很多选项可以实现这一点。我可以使用SharedPreferences,但那样我还需要某种事件来通知A它必须读取一个值!
任何想法都欢迎。
------最终解决方案------
最后,我得到了@Nathaniel Waggoner的建议,谢谢他。这是我做的:
在我的活动中,我声明了
BroadcastReceiver
的扩展:class ActivityBroadcast extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
final String txt2send = intent.getStringExtra("txt2send");
if ((txt2send != null) && (!txt2send.isEmpty())) {
// Do the needed stuff
...
}
}
}
现在我已经在我的类中声明并初始化了ActivityBroadcast
实例:
private static ActivityBroadcast broadcast_signal;
broadcast_signal = new ActivityBroadcast();
我控制onReceive
方法的触发只有通过我的IntentFilter
来发送SENDTXT2SOCK自定义操作的Intent,例如:
// CustomActions.SENDJOIN2CHAN is just a constant from a customized public class
// where I define my own constants to not interfere with the "official" ones
registerReceiver(broadcast_signal, new IntentFilter(CustomActions.SENDTXT2SOCK));
我的意思是在broadcast_signal
中仅注册CustomActions.SENDTXT2SOCK
操作,因此将忽略其他任何操作。现在我们只需从所需的活动向该接收器发送信号即可:
final Intent intentResult = new Intent(CustomActions.SENDTXT2SOCK);
intentResult.putExtra("txt2send", "blabla");
sendBroadcast(intentResult);
就是这样,完美地运作了!
AsyncTask
不应用于任何类型的长时间运行操作(包括网络或其他操作)。其次,如果您在Activity
A 中使用AsyncTask
并启动Activity
B,则有可能(虽然不太可能)系统会销毁Activity
A 以释放资源 - 可能的结果是一个孤立的线程(由doInBackground
使用)。我强烈建议使用带有工作线程的绑定Service
来执行网络操作。如果需要,它可以从两个活动中访问。 - Squonk