1.基于消息的通信机制 Intent ---boudle ,extra
数据类型有限,比如遇到不可序列化的数据Bitmap,InputStream, 或者LinkList链表等等数据类型就不太好用。
2. 利用static静态数据, public static成员变量;
3.基于外部存储的传输, File/Preference/ Sqlite ,如果要针对第三方应用需要Content Provider
4.基于IPC的通信机制
context 与Service之间的传输,如Activity与Service之间的通信,定义AIDL接口文件。
示例: http://www.eoeandroid.com/thread-36249-1-1.html
5. 基于Application Context, 例子如下文:
在当前Activity将两个值传到了Test中。但如果遇到不可序列化的数据,如Bitmap、InputStream等,intent就无能为力了。因此,我们很自然地会想到另外一种方法,静态变量。如下面的代码所示:
public class Product extends Activity
{
public static Bitmap mBitmap;
}
对于上面的代码来说,其他任何类可以直接使用Product中的mBitmap变量。这么做很easy、也很cool,但却very very wrong。我们千万不要以为Davlik虚拟机的垃圾回收器会帮助我们回收不需要的内存垃圾。事实上,回收器并不可靠,尤其是手机上,是更加的不可靠。 因此,除非我们要使自己的程序变得越来越糟糕,否则尽量远离static。
注:如果经常使用static的Bitmap、Drawable等变量。可能就会抛出一个在Android系统中非常著名的异常(以前budget这个单词一直记不住什么意思,自从经常抛出这个异常后,这个单词终于烂熟于心了, )
ERROR/AndroidRuntime(4958): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget
如果不使用static,总得有方法来代替它(尽管我很喜欢public static,我相信很多人也喜欢它,但为了我们的程序,建议还是忍痛割爱吧),那么这个新的解决方案就是本文的主题,这就是Application Context,相当于Web程序的Application,它的生命周期和应用程序一样长(这个我喜欢)。
那么现在来看看如何使用这个Application Context。我们可以通过Context.getApplicationContext或Context.getApplication方法获得 Application Context。但要注意,我们获得的只是Context对象,而更理想的方法是获得一个类的对象。ok,说干就干,下面来定义一个类。
package net.blogjava.mobile1;
import android.app.Application;
import android.graphics.Bitmap;
public class MyApp extends Application
{
private Bitmap mBitmap;
public Bitmap getBitmap()
{
return mBitmap;
}
public void setBitmap(Bitmap bitmap)
{
this .mBitmap = bitmap;
}
}
上面这个类和普通的类没什么本质的不同。但该类是Application的子类。对了,这就是使用Application Context的第一步,定义一个继承自Application的类。然后呢,就在这个类中定义任何我们想使其全局存在的变量了,如本例中的 Bitmap。下面还需要一个重要的步骤,就是在<application>标签中使用android:name属性来指定这个类,代码如 下:
< application android:name =".MyApp" android:icon ="@drawable/icon" android:label ="@string/app_name" >
</ application?
相关推荐
在Android应用开发中,尤其是使用Kotlin作为主要编程语言时,如何有效地在多个Activity之间共享数据是一个常见的挑战。`ViewModel`是Android架构组件之一,它为了解决这个问题提供了优雅的解决方案。本文将深入探讨...
3. **静态变量**:创建全局静态变量,可以方便地在PopupWindow和Activity之间共享数据。但是,这种方法不推荐在大型项目中使用,因为它可能导致数据同步问题和内存泄漏。 4. **BroadcastReceiver**:注册一个...
本文将深入探讨如何在Android的Activity之间共享数据,并提供代码实例供开发者参考。 首先,我们来理解Activity间数据传递的几种主要方式: 1. **Intent传参**:这是最常用的方法,通过Intent对象携带数据。可以...
在Android开发中,Activity间的通信是非常关键的一环,因为它允许应用程序的不同部分相互交互,实现功能的联动。本文将深入探讨两种常见的Activity间通信方式:Intent和SharedPreferences。 首先,Intent是Android...
在Android应用开发中,Activity是用户界面的基本单元,经常需要在不同的Activity之间传递数据。本文将详细介绍如何在Android的两个Activity之间进行值的传递,并结合实际案例进行解析。 首先,我们可以通过Intent...
文件存储包括内部存储和外部存储,ContentProvider是Android系统提供的标准接口,用于在应用间共享数据。 五、SharedPreferences SharedPreferences是轻量级的存储方式,适用于存储少量配置信息。数据以键值对形式...
本项目"猴子摘桃"是一个简单的小程序,旨在帮助开发者学习和理解如何在不同的Activity之间进行数据传递,这是Android开发中的一项重要技能。下面将详细阐述在Android中Activity间数据回传的关键知识点。 1. **...
在Android应用开发中,Activity是用户界面的基本单元,它们之间常常需要进行数据交换来实现功能交互。本教程将深入探讨如何在Android的Activity之间传递数据,以及如何在启动的Activity销毁后,主Activity能接收到...
在Android开发中,Activity之间的通信是应用程序核心功能的一部分,因为它们代表了用户界面的主要交互点。本文将详细探讨两种主要的Activity间通信方式:使用Intent和使用SharedPreferences。 首先,我们来看Intent...
在Android开发中,当需要在不同的Activity之间共享数据时,有多种方法可供选择。这里主要讨论的是如何在多个Activity间共享一个持久化的状态,比如一个socket连接,这在处理网络通信时尤为常见。传统的Intent传递...
在Android应用开发中,Activity是用户界面的基本单元,它们之间常常需要进行数据交互。本教程以一个具体的实例——“星座测算游戏”来讲解如何在不同的Activity之间传递数据。在这个游戏中,用户选择自己的出生日期...
在Android应用开发中,Activity是用户界面的基本单元,它们之间的数据传递是常见的需求。这个"Android例子源码Activity间的数据传递"着重展示了如何在不同的Activity之间有效地传递数据。以下是关于这个主题的详细...
3. **ContentProvider**: 尽管ContentProvider主要用于不同应用间的数据共享,但在同一应用内,Service也可以通过ContentProvider暴露数据,Activity通过ContentResolver查询或修改数据。这种方法适合于数据交换场景...
总结,Activity跳转、Intent使用、startActivityForResult/onActivityResult以及通过Application Context实现共享数据是Android开发中的核心知识点。理解并熟练运用这些概念,可以帮助开发者构建功能丰富且健壮的...
ContentProvider允许不同应用之间安全地共享数据,并提供了标准的CRUD(创建、读取、更新、删除)操作。 六、IntentService:异步数据处理 当数据需要在后台异步处理时,IntentService是一个不错的选择。...
静态成员变量适用于简单数据的跨Activity共享,但不推荐用于大量或复杂数据,因为这可能导致内存泄漏。 文件存储是一种持久化数据的方法,适用于需要在多个Activity间长期保存的数据。你可以使用File、...
在Android应用开发中,Activity是用户界面的主要载体,它们经常需要相互交互以实现复杂的业务逻辑。Handler作为一种消息处理机制,常被用来在不同的线程间(包括Activity之间)进行通信。本实例将深入探讨如何利用...
9. 如果需要在Fragment之间共享数据,可以使用ViewModel,这是一个可以在Activity重建时保持状态的对象,且在同一Activity的Fragment间可共享。 10. 使用FragmentTransaction的addToBackStack()方法,可以让用户...
IPC在Android中扮演着重要的角色,因为不同的应用可能需要共享数据或服务,而这些可能运行在各自的进程中。 Android支持多种IPC机制,包括Intent、Binder、ContentProvider、BroadcastReceiver和AIDL(Android ...
总结来说,理解和掌握Fragment与Activity之间的数据传输是Android开发中的关键技能。通过多种方法,如Intent、Bundle、构造函数、接口回调、静态方法和成员变量,以及现代架构组件,我们可以灵活地处理数据交互,...