`
Tony_Lee-S
  • 浏览: 82774 次
  • 性别: 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对象,而更理想的方法是获得一个类的对象。
1、新建一个类,继承自Application
package activity.com;

import android.app.Application;

public  class  MyApplication  extends  Application{

 private String myString="start";

public String getMyString() {

return myString;

}

public void setMyString(String myString) {

this.myString = myString;

}

}

2、在其它Activity中调用
package activity.com;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class FirstActivity extends Activity {
private TextView myTextView = null;
private Button myButton = null;
     MyApplication myApplication;   
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first);
myTextView = (TextView) findViewById(R.id.myTextView);
myTextView.setText("This is first TextView");
myButton = (Button) findViewById(R.id.myButton);
myButton.setText("First Button");
myButton.setOnClickListener(new myOnClickListener());
myApplication=(MyApplication) getApplication();
}
class myOnClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
String state = myApplication.getMyString();
Log.d("TEMP", "First获取数据:"+state);
myApplication.setMyString("First");
Log.d("TEMP", "First更改数据为数据:"+"First");
Intent intent = new Intent();
intent.setClass(FirstActivity.this, SecondActivity.class);
FirstActivity.this.startActivity(intent);
}
}
}


package activity.com;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class SecondActivity extends Activity{
private Button myButton2 = null;
private TextView myTextView2 = null;
MyApplication myApplication;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
System.out.println("2->1");
myTextView2 =(TextView)findViewById(R.id.myTextView2);
myTextView2.setText("This is second TextView");
System.out.println("2->2");
myButton2 = (Button)findViewById(R.id.myButton2) ;
myButton2.setText("Second Button");
myButton2.setOnClickListener(new myOnClickListener());
System.out.println("2->3");
myApplication=(MyApplication) getApplication();
}
class myOnClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
String state = myApplication.getMyString();
Log.d("TEMP", "Second获取数据:"+state);
myApplication.setMyString("Second");
Log.d("TEMP", "Second更改数据为数据:"+"Second");

}
}
}

3、AndroidManifest.xml中的设置:
在 application的name标签中添加MyApplication,如下:
<application android:icon="@drawable/icon" android:label="@string/app_name" android:name="MyApplication">
4、变量在一个Activity中改变后,在其它Activity中可以获取改变后的值
04-25 04:32:23.361: DEBUG/TEMP(1130): First获取数据:start
04-25 04:32:23.361: DEBUG/TEMP(1130): First更改数据为数据:First
04-25 04:32:30.891: DEBUG/TEMP(1130): Second获取数据:First
04-25 04:32:30.891: DEBUG/TEMP(1130): Second更改数据为数据:Second
04-25 04:32:36.743: DEBUG/TEMP(1130): First获取数据:Second
04-25 04:32:36.743: DEBUG/TEMP(1130): First更改数据为数据:First
04-25 04:32:39.883: DEBUG/TEMP(1130): Second获取数据:First
04-25 04:32:39.883: DEBUG/TEMP(1130): Second更改数据为数据:Second

转自:
http://www.cnblogs.com/playing/archive/2011/03/10/1980047.html
http://blog.csdn.net/liuwise/article/details/7637040
分享到:
评论

相关推荐

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

    7. **Parcelable或Serializable**:对于复杂的数据结构,可以使用Parcelable或Serializable将数据封装成对象,然后通过Intent或自定义的Binder在PopupWindow和Activity之间传递。 在实际开发中,选择哪种方式取决于...

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

    在Android应用开发中,Activity是用户界面的基本单元,它们之间的数据传递是十分常见的操作。本文将详细介绍Android中Activity之间数据传递的多种方式及其适用场景。 一、Intent传递数据 Intent是Android系统中...

    android Activity之间的数据传递

    本教程将深入探讨如何在Android的Activity之间传递数据,以及如何在启动的Activity销毁后,主Activity能接收到返回的结果。 首先,我们要了解Activity间的启动模式。Android提供了四种启动模式:标准模式(Standard...

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

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

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

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

    在不同Activity之间传递数据的四种常用方法

    在Android中传递数据的方法非常多,本次介绍4中比较常用的数据传递方法: 1.通过Intent传递数据 2.通过静态变量(static)传递数据 3.通过剪贴板(Clipboard)传递数据 4.通过全局对象传递数据 在...

    android Activity之间数据传递 Parcelable和Serializable接口的使用

    android Activity之间数据传递 Parcelable和Serializable接口的使用的具体实例代码,详情请看&gt;http://blog.csdn.net/js931178805/article/details/8268144

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

    在Activity之间传递数据库数据时,通常先读取数据到内存,然后通过Intent传递,或者在需要的时候再从数据库中查询。 了解了这些基础后,开发者可以根据实际需求选择合适的数据交互方式。在实际项目中,往往需要结合...

    Android 两个Activity之间传值

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

    Android Activity间共享数据

    在Android应用开发中,Activity是用户界面的基本单元,经常需要在不同的Activity之间传递数据来实现功能的联动。本文将深入探讨如何在Android的Activity之间共享数据,并提供代码实例供开发者参考。 首先,我们来...

    Activity review activity之间的数据传递

    总结起来,Activity之间的数据传递是Android开发中的核心部分,理解并熟练运用上述方法能帮助开发者构建健壮且用户体验良好的应用程序。无论是在启动Activity时传递简单数据,还是处理复杂的对象和数据流,都有相应...

    Activity间图片传递(3种方法)

    在Android开发中,Activity间的通信是至关重要的,其中包括数据的传递。当涉及到图片这种大对象时,我们需要采取一些特殊的方法来高效地进行传递。本文将详细介绍三种在Activity间传递图片的方法。 1. 资源ID间传递...

    用handler在两个activity之间传递数据

    资源包括如何在一个activity A里激活另一个activity B。...然后在两个activity之间用handler传输数据。在activity A里定义全局变量handler,用sendMessage来发数据,在handler里数据以消息队列的方式发送。

    android bundle和activity之间交换数据

    Bundle对象是Android系统用于存储和传递数据的一种容器,而Activity则是应用程序的基本组件,负责显示用户界面并处理用户交互。理解如何有效地在两者之间传递数据是提升Android开发技能的关键。 ### 1. Bundle对象...

    Activity之间传递数据

    在Android中,Intent不仅用于启动新的Activity,还可以用于在Activity之间传递数据。 首先,我们来了解Intent的基本概念。Intent是一个用来表示应用中一个动作的抽象描述,它可以携带数据。当启动一个新的Activity...

    activity与activity利用接口相互传递数据

    在Android开发中,Activity是应用程序的基本组件,用于展示用户界面并处理用户交互。当我们需要在两个Activity之间传递数据时,通常有多种方法,如Intent、Bundle、静态变量、文件、数据库等。本教程将聚焦于一种...

    Android 应用程序之间的通信

    综上所述,Android应用程序之间的通信涉及到Intent的使用、BroadcastReceiver的监听、ContentProvider的数据共享以及Activity的交互。理解并熟练掌握这些概念对于开发健壮且功能丰富的Android应用至关重要。在实际...

    Fragment与Activity使用Bundle传递数据

    在Android应用开发中,Fragment和Activity是两个非常重要的组件,它们共同构建了应用程序的用户界面。Fragment可以看作是Activity的一部分,可以在多个Activity之间重用。在实际开发中,经常需要在Fragment和...

    两个activity之间的数据传递

    在Android应用开发中,Activity是用户界面的基本单元,经常需要在不同的Activity之间传递数据。本教程将详细讲解如何在两个Activity之间实现数据传递,主要涉及三种常见方法:Intent的Extra数据、Bundle对象以及使用...

    通过Intent实现Activity之间的切换,并传递数据

    在Android应用开发中,Intent是一种强大的机制,用于在组件之间建立通信桥梁,特别是在Activity之间进行切换和数据传递。本文将详细讲解如何通过Intent实现Activity之间的切换,并探讨如何利用Intent进行数据传递。 ...

Global site tag (gtag.js) - Google Analytics