假设你已经明白下面的内容,那么这篇博客很适合您!

<1> Application 的作用及用法

<2> Activity、Task 以及 Application 之间的关系

<3> Handler 的用法

真的很感谢 anhenzhufeng 这位 CSDN 好友,如果不是他的虚心和认真,恐怕这篇文章难以问世!

再次感谢他在我的博客http://blog.csdn.net/androidbluetooth/article/details/6384641#reply的提问,这篇文章送给他以及有需要的朋友们。希望这篇博客能够帮到您!

读这篇博客之前,我们看看 anhenzhufeng 的问题,见截图,如下:

大致说一下我的思路吧!

多个 Activity 之间可以通过 Application 共享数据,在这里我就让两个 Activity 共享 Handler(更新UI,我一般使用 Handler),主 Activity 中更新 UI,另一个 Activity 发送更新UI的消息。这样就达到在主Activity更新UI的目的。好吧,具体看代码!

1. 主 Activity 的 main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:id="@+id/tv"  android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="changed before: This is MasterActivity!"/><Button android:layout_marginTop="15dip"android:id="@+id/btn_to"  android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="To OtherActivity"/></LinearLayout>

2. 主 Activity 的Java 代码

package mark.zhang;import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;public class MasterActivity extends Activity {// 用于msg.what值private static final int CHANGED = 0x0010;private Button btn_to = null;private TextView tv = null;private MyHandler handler = null;private MyAPP mAPP = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);mAPP = (MyAPP) getApplication();handler = new MyHandler();tv = (TextView) findViewById(R.id.tv);btn_to = (Button) findViewById(R.id.btn_to);// 设置监听器btn_to.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 设置共享变量mAPP.setHandler(handler);// 启动另一个ActivityIntent intent = new Intent(MasterActivity.this,ToChangeViewActivity.class);startActivity(intent);}});}/*** 自己实现 Handler 处理消息更新UI* * @author mark*/final class MyHandler extends Handler {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if(msg.what == CHANGED) { // 更新UItv.setText("changed after: I have be changed by Other Activity!");tv.setBackgroundColor(Color.BLUE);btn_to.setText("I have been changed!");btn_to.setBackgroundColor(Color.RED);}}}
}

3. 自实现Application

对于Application可以参考sdk api文档。在这里,我就直接使用,不做解释!

package mark.zhang;import mark.zhang.MasterActivity.MyHandler;
import android.app.Application;/*** 自己实现Application,实现数据共享* * @author mark**/
public class MyAPP extends Application {// 共享变量private MyHandler handler = null;// set方法public void setHandler(MyHandler handler) {this.handler = handler;}// get方法public MyHandler getHandler() {return handler;}
}

4. 改变主Activity UI 的Activity

该 Activity 是 ToChangeViewActivity,Java、以及布局文件 show.xml 代码如下。

package mark.zhang;import mark.zhang.MasterActivity.MyHandler;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;public class ToChangeViewActivity extends Activity {private static final int CHANGED = 0x0010;private MyAPP mAPP = null;private MyHandler mHandler = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.show);mAPP = (MyAPP) getApplication();// 获得该共享变量实例mHandler = mAPP.getHandler();findViewById(R.id.btn_chang).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 发送消息mHandler.sendEmptyMessage(CHANGED);ToChangeViewActivity.this.finish();}});}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:id="@+id/tv"  android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="hello,MasterActivity!"/> <Buttonandroid:id="@+id/btn_chang"  android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="change the MasterActivityView..."/> </LinearLayout>

5. 修改manifest.xml文件
这里主要注意两点:

<1> 声明 Application

<2> 注册 ToChangeViewActivity

代码,如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="mark.zhang"android:versionCode="1"android:versionName="1.0"><uses-sdk android:minSdkVersion="7" /><application android:name=".MyAPP" android:icon="@drawable/icon" android:label="@string/app_name"><activity android:name=".MasterActivity"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".ToChangeViewActivity"></activity></application>
</manifest>

6. 运行效果

点击 " To OtherActivity",进入 ToChangeViewActivity

再点击“ change the MasterActivityView...”

改变效果

7. 最后思考

这里只是两个Activity之间交互,多个 Activity 之间需要考虑设置 launchMode 即 Activity 的加载模式,更多关于这方面的知识可以参考:

http://blog.csdn.net/androidbluetooth/article/details/6547670

http://download.csdn.net/source/3368975

本篇博客源码下载地址:http://download.csdn.net/source/3447670

Handler: Activity 之间通过 Handler 通信相关推荐

  1. Android面试专题系列(四):Activity之间如何进行通信→LiveDataBus

    不诗意的女程序媛不是好厨师~ 转载请注明出处,From李诗雨-https://blog.csdn.net/cjm2484836553/article/details/105147592 <And ...

  2. 【转】android之在activity中控制另一个activity的UI更新_如何在activity之间传递handler...

    来自:http://blog.csdn.net/jason0539/article/details/18055259 遇到一个问题,需要在一个activity中控制另一个acitivity做一些更新, ...

  3. Fragment与Activity之间的相互通信

    https://blog.csdn.net/u012702547/article/details/49786417 https://blog.csdn.net/carson_ho/article/de ...

  4. 【转】 android之如何在两个activity之间传递handler_利用broadcast广播机制

    原文:http://blog.csdn.net/jason0539/article/details/18075293 这算是如何在两个activity之间传递handler的解决方案二了,解决方案一见 ...

  5. 正确理解 AsyncTask,Looper,Handler三者之间的关系(基于android 4.0)

    Looper 和Handler 是理解好AsyncTask的一个基础,我们可以先从这里开始,先给出一个主线程和子线程互相通信的例子. 1 package com.example.loopertest; ...

  6. 从Android中Activity之间的通信说开来

    引言 最近两个星期在研究android的应用开发,学习了android应用开发的基础知识,基本控件,基本布局,基本动画效果,数据存储,http访问internet等等基础知识. android中有一个 ...

  7. 【Android 应用开发】Activity生命周期 与 Activity 之间的通信

    一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...

  8. Android中BroadCast与Activity之间的通信

    在看本文之前,假设你对于Android的广播机制不是非常了解.建议先行阅读我转载的一篇博文:图解 Android 广播机制. 因为本案例比較简单,故直接在此贴出代码,不做过多的阐述. 先上效果截图: ...

  9. Android(Fragment和Activity之间通信)

    Fragment的使用可以让我们的应用更灵活的适配各种型号的安卓设备,但是对于Fragment和Activity之间的通信,很多朋友应该比较陌生,下面我们就通过一个实例来看一看如何实现. 一.Acti ...

最新文章

  1. 数据由SqlServer2008转移到MySQL的一个方法
  2. elasticsearch update 无结果
  3. python中的id()函数及读取list的例子
  4. ubuntu11.04解决root不能登录的问题
  5. PAT甲级1077 Kuchiguse:[C++题解]字符串、最长公共后缀
  6. Redis中的Sentinel 验证
  7. [Windows驱动开发](二)基础知识——数据结构
  8. 简单的01背包和完全背包
  9. java观察者模式在spring中的应用_在Spring中使用观察者模式
  10. C4D插件:Springy for Mac 动​​画对象添加重叠动作插件
  11. 金融科技:中国农行研发中心DevOps规划与实践
  12. 软件_手把手教vscode配置c++,python开发环境
  13. Java 定时器 Timer 与 定时任务 TimeTask
  14. gaussian窗口函数_常用窗函数的特点
  15. lammps建模_LAMMPS之Moltemplate建模教程
  16. imb服务器怎么拆硬盘,IBM P750更换本地硬盘
  17. 希捷硬盘校准日志分析
  18. 【STL容器讲解—栈队列】
  19. Suspending console(s) (use no_console_suspend to debug) android4.0 OMAP4460
  20. Cadence 17.2( Allegro PCB ) 使用 Shape Symbol 制作不规则焊盘

热门文章

  1. 阿里云settings.xml配置
  2. 抖音直播间挂人气协议工具
  3. 小程序嵌套h5页面_微信小程序内嵌h5页面
  4. verification和validation的区别
  5. Google翻译API的使用
  6. 【大数据】为什么要学习大数据
  7. C#实现批量生成条形码 ——主要用于准考证号的条形码生成
  8. 使用线性回归构建房价预测模型
  9. TTL与非门多余的输入端处置办法及其优缺点
  10. SpringBoot使用Workbook读取excel中内容