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