看板 AndroidDev 關於我們 聯絡資訊
※ 引述《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