Android应用开发教程:两个运行的Activity之间的通信

移动开发 Android
本文将介绍《Android应用开发教程:两个正在运行的Activity之间的通信》,在Android应用程序开发的时候,从一个Activity启动另一个Activity并传递一些数据到新的Activity上非常简单,但是当您需要让后台运行的Activity回到前台并传递一些数据可能就会存在一点点小问题。

在Android应用程序开发的时候,从一个Activity启动另一个Activity并传递一些数据到新的Activity上非常简单,但是当您需要让后台运行的Activity回到前台并传递一些数据可能就会存在一点点小问题。

首先,在默认情况下,当您通过Intent启到一个Activity的时候,就算已经存在一个相同的正在运行的Activity,系统都会创建一个新的Activity实例并显示出来。为了不让Activity实例化多次,我们需要通过在AndroidManifest.xml配置activity的加载方式(launchMode)以实现单任务模式,如下所示:

1 <activity android:label="@string/app_name" android:launchmode="singleTask"android:name="Activity1">
2 </activity>

 

launchMode为singleTask的时候,通过Intent启到一个Activity,如果系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会再调用通常情况下我们处理请求数据的onCreate方法,而是调用onNewIntent方法,如下所示:

1 protected void onNewIntent(Intent intent) {
2   super.onNewIntent(intent);
3   setIntent(intent);//must store the new intent unless getIntent() will return the old one
4   processExtraData();
5 }

 

不要忘记,系统可能会随时杀掉后台运行的Activity,如果这一切发生,那么系统就会调用onCreate方法,而不调用onNewIntent方法,一个好的解决方法就是在onCreate和onNewIntent方法中调用同一个处理数据的方法,如下所示:

01 public void onCreate(Bundle savedInstanceState) {
02   super.onCreate(savedInstanceState);
03   setContentView(R.layout.main);
04   processExtraData();
05 }
06  
07 protected void onNewIntent(Intent intent) {
08   super.onNewIntent(intent);
09   setIntent(intent);//must store the new intent unless getIntent() will return the old one
10   processExtraData()
11 }
12  
13 private void processExtraData(){
14   Intent intent = getIntent();
15   //use the data received here
16 }

 

【编辑推荐】

  1. Android学习笔记:Activity跳转
  2. Intent,Android应用核心探秘
  3. 阐述Android Intent使用整理问题
  4. Android Activity进行全解析
  5. Android Activity跳转相关操作技巧分享
责任编辑:佚名 来源: ideasandroid
相关推荐

2021-12-16 16:20:57

GoWebSocketLinux

2011-05-19 17:49:08

ActivityAndroid开发

2010-07-25 14:31:54

Telnet程序

2020-08-14 08:13:49

列表差异编程

2009-07-15 18:29:22

Jython应用

2013-06-20 09:35:18

Instagramvine短视频应用

2010-04-20 15:09:05

负载均衡

2020-04-17 10:13:51

Python开发工具

2021-03-19 11:05:50

Linux目录命令

2020-09-28 18:19:15

awkLinux

2011-05-26 15:22:57

Android Activity

2010-02-25 16:45:13

WCF应用技巧

2015-05-15 09:37:24

iOS开发争议

2010-07-02 12:26:51

LEACH协议

2019-11-05 08:30:20

Android开发工具

2010-03-04 09:50:14

企业定制软件开发

2017-04-10 14:35:35

SambaRsyncSysVol

2019-06-25 10:53:06

AndroidFlutter通信

2014-05-27 14:33:37

AndroidActivitysingleTask

2014-05-27 14:59:24

AndroidActivitysingleTask
点赞
收藏

51CTO技术栈公众号