- 浏览: 83373 次
- 性别:
- 来自: 广州
-
最新评论
-
Tony_Lee-S:
已经说得很明白了吧?“把list强转成Serializable ...
在android中用 Intent 传递 List类型的数据(转) -
zhiduo5:
Activity与Service之间传递参数的介质这个怎么弄啊 ...
在android中用 Intent 传递 List类型的数据(转) -
mathlove:
很有用的内容
一个Android下的自动下载歌词的代码(转)
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就无能为力了。因此,我们很自然地会想到另外一种方法,静态变量。如下面的代码所示:
对于上面的代码来说,其他任何类可以直接使用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
2、在其它Activity中调用
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
数据类型有限,比如遇到不可序列化的数据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
发表评论
-
SQLite多线程读写实践及常见问题总结(转)
2013-02-07 11:04 3053基本操作的部分,大家都很熟悉了,这里根据个人切身经验,总结了 ... -
android内存溢出的解决方法(转)
2013-02-07 11:23 8271. 当项目中包含大量图片,或者图片过大 方法1:等比例缩 ... -
android中的跨进程通信的实现——远程调用过程和aidl(转)
2013-02-07 19:35 1357android在设计理念上强调组件化,组件之间的依赖性很小。 ... -
在EditText/TextView中插入表情图片、样式、下划线等(转)
2012-08-22 12:01 1616EditText: 通常用于显示文字,但有时候也需要在文字中 ... -
自定义Tab选项卡(转)
2012-08-21 08:44 1510效果: 代码: import android.app. ... -
android设置button透明度(转)
2012-08-18 22:09 1354Button或者ImageButton的背景设为透明或者半透明 ... -
Android中的TabHost(转)
2012-08-17 14:50 2235介绍 有时,我们想在一个window中显示多个视图,这时就需 ... -
Android开发之蓝牙(Bluetooth)操作(二)--修改本机蓝牙设备的可见性,并扫描周围可用的蓝牙设备(转)
2012-08-15 16:54 1486一. 修改本机蓝牙设备的可见性 二. 扫描周围可用的蓝牙设备 ... -
Android开发之蓝牙(Bluetooth)操作(一)--扫描已经配对的蓝牙设备(转)
2012-08-15 16:49 1750一. 什么是蓝牙(Bluetooth)? 1.1 BuleT ... -
一个Android下的自动下载歌词的代码(转)
2012-08-15 13:41 12171. 原理是用Baidu音乐搜索的连接,拼参数进去读取歌词。 ... -
ViewPager多页面滑动切换以及动画效果(转)
2012-08-14 16:55 1911一、首先,我们来看一下效果图,这是新浪微博的Tab滑动效果。我 ... -
Android的Handler总结(转)
2012-08-14 14:18 942一、Handler的定义: 主要接受子线程 ... -
AsyncTask的用法(转)
2012-08-14 14:11 911在开发Android应用时必须遵守单线程模型的原则: Andr ... -
Android逐帧动画(转)
2012-08-13 16:46 1800Android有两种动画,一种是tweened animati ... -
android 扫描SD卡与系统文件(转)
2012-08-11 16:12 1363当手机或模拟器开机时,会调用android的MediaScan ... -
android 怎样为多媒体文件生成缩略图(转)
2012-08-10 17:11 12951、Video 对于视频,取第一帧作为缩略图,也就是怎样从fi ... -
TextView 实现自动换行(转)
2012-08-10 16:44 1416package com.liao.intentservice; ... -
android:屏幕自适应(转)
2012-08-10 16:10 1409demo下载: http://www.eoeandroid.c ... -
listview加载性能优化ViewHolder (转)
2012-07-28 15:16 1473在android开发中Listview是一个很重要的组件,它以 ... -
Android进程间通信--消息机制及IPC机制实现(转)
2012-07-19 10:51 852一、概念及说明 Android ...
相关推荐
4. Content Provider安全性:Content Provider用于在应用程序之间共享数据。在设计Content Provider时,需确保只共享必要的数据,并对访问数据的请求进行严格的权限检查。同时,防止SQL注入等常见的数据访问漏洞。 ...
下面我们将详细探讨Android中的几种主要数据存储方式。 1. **SharedPreferences** SharedPreferences是Android中最简单的数据存储方式,常用于保存应用的配置设置。它是一个轻量级的存储系统,支持键值对形式的...
9. **内容提供者(ContentProvider)**:ContentProvider用于在应用间共享数据,是访问Android系统资源(如联系人、日历)的标准途径。 10. **权限管理**:Android应用需要声明并获取相应的权限才能访问特定资源,...
- **ContentProvider**:用于存储和检索数据,使不同应用程序之间可以共享数据。 2. **应用程序组件** - 应用程序由多个组件构成,包括Activity、Service、BroadcastReceiver以及ContentProvider等。每个组件都...
ContentProvider是Android系统提供的一种数据共享机制,使得不同应用之间可以安全地读写数据。ContactsContract类是与Contacts相关的ContentProvider的接口,定义了各种数据表和常量,如RawContacts、Data、Groups等...
Android系统本身就提供了几种预定义的切换动画,如`slide`(滑动)和`explode`(爆炸)。要使用这些动画,我们可以在`AndroidManifest.xml`中针对每个`<activity>`标签设置`android:enterAnimation`和`android:...
3. **ContentProvider**:ContentProvider是Android中数据共享的桥梁,可以实现应用间的数据库、文件等数据交互。Demo中会展示如何创建和使用ContentProvider,以及如何通过Uri进行数据操作。 4. **...