作者givemepass (λ)
看板AndroidDev
標題Re: [問題] 兩個Activity溝通
時間Tue Dec 20 22:16:03 2016
※ 引述《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這幾個方法
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.149.7
※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1482243371.A.915.html
→ ssccg: listener還是要傳listener物件的參考,沒有解決問題吧 12/21 09:13
→ ssccg: 另外後三個方法限同個app(process),前兩個同樣是Intent有 12/21 09:17
→ ssccg: 資料大小限制 12/21 09:17
→ givemepass: listener傳遞物件有什麼問題?@@ 12/21 11:16
→ givemepass: activity傳到activity是同app 沒錯 原文有要跨行程? 12/21 11:16
→ givemepass: intent有大小限制也沒錯 原文有限定大小? 12/21 11:16
→ ssccg: 原文也沒說沒有啊,acitivity怎麼不能傳別的app的activity? 12/21 13:09
→ ssccg: listener傳遞物件,假設a b兩個activity好了,要先呼叫b的 12/21 13:10
→ ssccg: setListener,這時候a要怎麼把listener這物件傳給b? 12/21 13:11
→ ssccg: 不就又回到一開始要怎麼把物件從a傳到b的問題 12/21 13:11
→ givemepass: 原文不是說要startactivity 12/21 16:51
→ givemepass: 為什麼要解讀成跨行程@@? 12/21 16:51
→ givemepass: listener可以搭配singleton來完成 也可以做成全域方法 12/21 16:51
→ givemepass: 很多種阿XD 12/21 16:51
→ ssccg: 那不就是要搭配別種方法,就不算這個問題的解法啊 12/21 21:04
→ ssccg: 有辦法傳listener物件,就有辦法直接傳要傳的東西 12/21 21:06
→ ssccg: startactivity可以start別的app的acitivty啊 12/21 21:07
→ ssccg: 原po還提到了IPC binder,我才覺得怎麼能解讀成一定不是IPC 12/21 21:07
→ ssccg: 不要說別的app,同app的acitivity也能開在不同process 12/21 21:10
→ ssccg: 也不是說那些方法不對(除了listener外),只是提些限制而已 12/21 21:23
推 magic704226: 感謝兩位都是幫小弟解決問題,目前僅限於同一個 12/22 15:09
→ magic704226: package,我沒說清楚,是我的疏忽 12/22 15:09
→ Killercat: 另外要互傳其實用service會不會簡單一點..... 12/26 14:26
推 siriusu: 推,也推釐清 12/31 07:14