关于Android中传递数据的一些讨论
在Android中编写过程序的开发人员都知道。在Activity、Service等组件之间传递数据(尤其是复杂类型的数据)很不方便。一般可以使用Intent来传递可序列化或简单类型的数据。看下面的代码。
Intent intent = new Intent( this , Test. class );
intent.putExtra( "
param1 " , " data1 " );
intent.putExtra( " intParam1 " , 20 );
startActivity(intent);
这样就ok了。在当前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?
接下来的最后一步就是向MyApp对象中存入Bitmap对象,或从MyApp对象中取出Bitmap对象了,存入Bitmap对象的代码如下:
MyApp myApp = (MyApp)getApplication();
Bitmap bitmap =
BitmapFactory.decodeResource( this .getResources(),
R.drawable.icon);
myApp.setBitmap(bitmap);
获得Bitmap对象的代码:
ImageView imageview =
(ImageView)findViewById(R.id.ivImageView);
MyApp myApp =
(MyApp)getApplication();
imageview.setImageBitmap(myApp.getBitmap());
上面两段代码可以在任何的Service、Activity中使用。全局的,哈哈。
很好的方法。
相关推荐
Intent可以携带一些数据,比如基本类型数据int、Boolean,或是String,或是序列化对象,Parcelable与Serializable。 Intent传递数据时,如果数据太大,可能会出现异常。比如App闪退,或是Intent发送不成功,logcat...
"Android通过Intent传递数据"这一主题,涵盖了Intent的基本使用和数据传递的方式。 Intent分为显式Intent和隐式Intent。显式Intent明确指定要启动的目标组件,而隐式Intent则不指定具体接收者,而是根据Intent的...
在Intent中传递和接收对象: ```java Intent intent = new Intent(context, TargetActivity.class); intent.putExtra("myObject", myObject); startActivity(intent); // 在TargetActivity中 MyObject ...
在Android应用开发中,Intent是传递数据非常常见的方式,它用于启动Activity、Service或BroadcastReceiver,并可以在它们之间传递数据。然而,当面临大量的数据需要在应用程序的不同组件间共享时,Intent可能就显得...
在Android应用开发中,Intent是一种强大的工具,用于在不同的组件之间进行通信,如启动Activity、启动Service或在组件间传递数据。"Android Intent传递对象"这个主题主要关注如何利用Intent来传递自定义对象,以便在...
Android Studio 3.0 下使用Intent传递数据和数据回传的示例。实现了一个简单的登录界面,用户输入用户名和密码后,点击登录把用户名和密码传递到主界面,主界面显示用户名和密码,然后在主界面中购买一个物品,打开...
4种最常用的Intent传递方式,这4种方式如下: 1、通过Intent传递数据 2、通过静态变量传递数据 3、通过剪切板传递数据 4、通过全局变量传递数据
在Android应用开发中,Intent是一种强大的机制,用于在组件之间建立通信桥梁,特别是在Activity之间进行切换和数据传递。本文将详细讲解如何通过Intent实现Activity之间的切换,并探讨如何利用Intent进行数据传递。 ...
在Android应用开发中,数据传递是至关重要的一个环节,它涉及到不同组件间的通信,比如Activity、Service、BroadcastReceiver之间的交互。本篇文章将深入探讨四种主要的数据传递方式:Intent、Bundle、Serializable...
Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法。 被传递的对象需要先实现序列化,而序列化对象有两种方式:java.io.Serializable和android.os.Parcelable Java中...
以上就是关于Android中的GridView、事件处理以及Intent传递参数的相关知识。理解并熟练掌握这些内容,对于开发具有交互性的Android应用至关重要。在实际项目中,还可以结合Adapter的其他方法,如`...
在Android应用开发中,Intent是连接应用程序组件之间通信的关键机制,它用于启动其他组件或传递数据。本篇文章将深入探讨Intent的基本概念、类型、构造方法以及如何在Android中有效地使用Intent。 Intent是一种意图...
本篇文章将详细探讨如何通过Intent在Android中传递对象,主要分为两种方式:使用`Serializable`接口和`Parcelable`接口。 1. **Serializable接口** `Serializable`是Java提供的一个标准序列化接口,当一个类实现了...
在Android开发环境中,Intent是应用间通信的重要工具,它用于启动其他组件或传递数据。本实验将深入探讨Android Studio中Intent的使用,帮助你更好地理解如何在不同的Activity之间跳转和传递信息。 首先,让我们...
在Android应用开发中,Intent是一种强大的机制,用于在组件之间传递数据和启动操作。Intent不仅可以用来启动新的Activity,还能启动Service、BroadcastReceiver等。在这个场景中,我们将关注Intent如何与Bundle结合...
在Android应用开发中,Intent是连接应用程序组件的重要桥梁,它被用来启动新的Activity或Service,同时还能在组件间传递数据。本篇文章将深入探讨如何利用Intent进行数据传递,并以Activity间的交互为例,详细阐述...
Intent在Android中则是一个包含意图信息的对象,它用于启动活动(Activity)、服务(Service)或者传递数据。Intent有两种主要类型:显式Intent和隐式Intent。显式Intent明确了要启动的目标组件,通过组件的类名进行...
在Android开发中,Intent是一种非常重要的组件,它用于在应用程序的不同组件之间传递消息,实现活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)以及内容提供者(Content Provider)之间的交互...