Re: [问题] 两个Activity沟通

楼主: givemepass (λ)   2016-12-20 22:16:03
※ 引述《magic704226 (梅姬?没鸡?傻傻分不清楚)》之铭言:
: 目前有两个Activity
: A1 startActivity A2 后
: 还有资料要从 A1 -> A2
: 目前是用broadcast
: 有没有比较快的方法?
: 除了Android IPC binder实做?
Activity互相沟通可以透过以下方法
1. Intent
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("key", "value");
intent.putExtras(bundle);
intent.setClass(A.this, B.class);
startActivity(intent);
2. Broadcast
registerReceiver(mBroadcast, new IntentFilter(MY_MESSAGE));
Intent intent = new Intent();
intent.setAction(MY_MESSAGE);
sendBroadcast(intent);
3. Listener
public interface OnEventCompletedListener{
void onCompleted(String result);
}
public void setOnEventCompletedListener(OnEventCompletedListener listener){
mOnEventCompletedListener = listener;
}
private OnEventCompletedListener mOnEventCompletedListener;
public void notifyData(String result){
if(mOnEventCompletedListener != null){
mOnEventCompletedListener.onCompleted(result);
}
}
4. Application
public class MyApplication extends Application{
private String str;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((MyApplication)getApplication()).getStr();
}
}
5. singleton
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton (){}
public static Singleton getInstance() {
return instance;
}
}
6. EventBus
A Activity
MyEvent event = new MyEvent();
event.setMyEventString(editText.getText().toString());
mEventBus.post(event);
B Activity
public void onEventMainThread(MyEvent event){
event.getMyEventString();
}
靠印象打的 没有编译过 应该会有错
大guy4这几个方法
作者: ssccg (23)   2016-12-21 09:13:00
listener还是要传listener物件的参考,没有解决问题吧另外后三个方法限同个app(process),前两个同样是Intent有资料大小限制
楼主: givemepass (λ)   2016-12-21 11:16:00
listener传递物件有什么问题?@@activity传到activity是同app 没错 原文有要跨行程?intent有大小限制也没错 原文有限定大小?
作者: ssccg (23)   2016-12-21 13:09:00
原文也没说没有啊,acitivity怎么不能传别的app的activity?listener传递物件,假设a b两个activity好了,要先呼叫b的setListener,这时候a要怎么把listener这物件传给b?不就又回到一开始要怎么把物件从a传到b的问题
楼主: givemepass (λ)   2016-12-21 16:51:00
原文不是说要startactivity为什么要解读成跨行程@@?listener可以搭配singleton来完成 也可以做成全域方法很多种阿XD
作者: ssccg (23)   2016-12-21 21:04:00
那不就是要搭配别种方法,就不算这个问题的解法啊有办法传listener物件,就有办法直接传要传的东西startactivity可以start别的app的acitivty啊原po还提到了IPC binder,我才觉得怎么能解读成一定不是IPC不要说别的app,同app的acitivity也能开在不同process也不是说那些方法不对(除了listener外),只是提些限制而已
作者: magic704226 (梅姬?沒雞?傻傻分不清楚)   2016-12-22 15:09:00
感谢两位都是帮小弟解决问题,目前仅限于同一个package,我没说清楚,是我的疏忽
作者: Killercat (杀人猫™)   2016-12-26 14:26:00
另外要互传其实用service会不会简单一点.....

Links booklink

Contact Us: admin [ a t ] ucptt.com