`
hunankeda110
  • 浏览: 746997 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android中不同activity之间共享数据

阅读更多

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?

分享到:
评论

相关推荐

    使用ViewModel解决多个Activity数据共享问题(Kotlin版)

    在Android应用开发中,尤其是使用Kotlin作为主要编程语言时,如何有效地在多个Activity之间共享数据是一个常见的挑战。`ViewModel`是Android架构组件之一,它为了解决这个问题提供了优雅的解决方案。本文将深入探讨...

    Android PopupWindow与Activity之间的数据传递.zip

    3. **静态变量**:创建全局静态变量,可以方便地在PopupWindow和Activity之间共享数据。但是,这种方法不推荐在大型项目中使用,因为它可能导致数据同步问题和内存泄漏。 4. **BroadcastReceiver**:注册一个...

    Android Activity间共享数据

    本文将深入探讨如何在Android的Activity之间共享数据,并提供代码实例供开发者参考。 首先,我们来理解Activity间数据传递的几种主要方式: 1. **Intent传参**:这是最常用的方法,通过Intent对象携带数据。可以...

    android_不同Activity之间的通信方式

    在Android开发中,Activity间的通信是非常关键的一环,因为它允许应用程序的不同部分相互交互,实现功能的联动。本文将深入探讨两种常见的Activity间通信方式:Intent和SharedPreferences。 首先,Intent是Android...

    Android 两个Activity之间传值

    在Android应用开发中,Activity是用户界面的基本单元,经常需要在不同的Activity之间传递数据。本文将详细介绍如何在Android的两个Activity之间进行值的传递,并结合实际案例进行解析。 首先,我们可以通过Intent...

    Android-Activity之间数据传递的多种方式

    文件存储包括内部存储和外部存储,ContentProvider是Android系统提供的标准接口,用于在应用间共享数据。 五、SharedPreferences SharedPreferences是轻量级的存储方式,适用于存储少量配置信息。数据以键值对形式...

    Android开发 猴子摘桃小项目——学习Activity之间的数据回传

    本项目"猴子摘桃"是一个简单的小程序,旨在帮助开发者学习和理解如何在不同的Activity之间进行数据传递,这是Android开发中的一项重要技能。下面将详细阐述在Android中Activity间数据回传的关键知识点。 1. **...

    android Activity之间的数据传递

    在Android应用开发中,Activity是用户界面的基本单元,它们之间常常需要进行数据交换来实现功能交互。本教程将深入探讨如何在Android的Activity之间传递数据,以及如何在启动的Activity销毁后,主Activity能接收到...

    Android中Activity之间通信

    在Android开发中,Activity之间的通信是应用程序核心功能的一部分,因为它们代表了用户界面的主要交互点。本文将详细探讨两种主要的Activity间通信方式:使用Intent和使用SharedPreferences。 首先,我们来看Intent...

    android不同activity之间共享数据解决方法

    在Android开发中,当需要在不同的Activity之间共享数据时,有多种方法可供选择。这里主要讨论的是如何在多个Activity间共享一个持久化的状态,比如一个socket连接,这在处理网络通信时尤为常见。传统的Intent传递...

    【Android开发】不同Activity之间的数据回传实例(二)星座测算游戏

    在Android应用开发中,Activity是用户界面的基本单元,它们之间常常需要进行数据交互。本教程以一个具体的实例——“星座测算游戏”来讲解如何在不同的Activity之间传递数据。在这个游戏中,用户选择自己的出生日期...

    Android例子源码Activity间的数据传递

    在Android应用开发中,Activity是用户界面的基本单元,它们之间的数据传递是常见的需求。这个"Android例子源码Activity间的数据传递"着重展示了如何在不同的Activity之间有效地传递数据。以下是关于这个主题的详细...

    android多个activity和一个service通信

    3. **ContentProvider**: 尽管ContentProvider主要用于不同应用间的数据共享,但在同一应用内,Service也可以通过ContentProvider暴露数据,Activity通过ContentResolver查询或修改数据。这种方法适合于数据交换场景...

    android activity跳转 Application Context实现共享数据

    总结,Activity跳转、Intent使用、startActivityForResult/onActivityResult以及通过Application Context实现共享数据是Android开发中的核心知识点。理解并熟练运用这些概念,可以帮助开发者构建功能丰富且健壮的...

    Activity review activity之间的数据传递

    ContentProvider允许不同应用之间安全地共享数据,并提供了标准的CRUD(创建、读取、更新、删除)操作。 六、IntentService:异步数据处理 当数据需要在后台异步处理时,IntentService是一个不错的选择。...

    Android Activity之间的跳转以及数据的交互传递

    静态成员变量适用于简单数据的跨Activity共享,但不推荐用于大量或复杂数据,因为这可能导致内存泄漏。 文件存储是一种持久化数据的方法,适用于需要在多个Activity间长期保存的数据。你可以使用File、...

    android 实例 Activity 之间通过 Handler 通信

    在Android应用开发中,Activity是用户界面的主要载体,它们经常需要相互交互以实现复杂的业务逻辑。Handler作为一种消息处理机制,常被用来在不同的线程间(包括Activity之间)进行通信。本实例将深入探讨如何利用...

    Android中Fragment和Activity之间的互操作代码例子

    9. 如果需要在Fragment之间共享数据,可以使用ViewModel,这是一个可以在Activity重建时保持状态的对象,且在同一Activity的Fragment间可共享。 10. 使用FragmentTransaction的addToBackStack()方法,可以让用户...

    android 14.Activity之间的Inter-process沟通

    IPC在Android中扮演着重要的角色,因为不同的应用可能需要共享数据或服务,而这些可能运行在各自的进程中。 Android支持多种IPC机制,包括Intent、Binder、ContentProvider、BroadcastReceiver和AIDL(Android ...

    Fragment与Activity 之间的数据传输

    总结来说,理解和掌握Fragment与Activity之间的数据传输是Android开发中的关键技能。通过多种方法,如Intent、Bundle、构造函数、接口回调、静态方法和成员变量,以及现代架构组件,我们可以灵活地处理数据交互,...

Global site tag (gtag.js) - Google Analytics