Dict.CN 在線詞典, 英語學習, 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          統計

          留言簿(23)

          積分與排名

          優秀學習網站

          友情連接

          閱讀排行榜

          評論排行榜

          android 應用程序Activity之間數據傳遞與共享的幾種途徑【轉】

          http://blog.csdn.net/kieven2008/article/details/6006905

          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?


              接下來的最后一步就是向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中使用。全局的。


          參考:

          1.http://flyvenus.net/?p=229

          2.http://blog.csdn.net/nokiaguy/archive/2010/11/10/5998986.aspx

          posted on 2011-08-25 07:31 都市淘沙者 閱讀(303) 評論(0)  編輯  收藏 所屬分類: Android/J2ME/Symbian/Jabber

          主站蜘蛛池模板: 灵寿县| 靖西县| 工布江达县| 峨山| 海宁市| 泾源县| 商南县| 宣化县| 沂源县| 南雄市| 韶关市| 建平县| 尼木县| 余江县| 密山市| 林州市| 阿城市| 宜兰县| 葫芦岛市| 山阳县| 睢宁县| 东安县| 贵州省| 利津县| 深圳市| 木里| 庐江县| 南雄市| 华阴市| 三台县| 湘西| 米林县| 岗巴县| 岳阳市| 云南省| 抚州市| 确山县| 定结县| 天峨县| 三门县| 凌海市|