<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
    數據加載中……

    關于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中使用。全局的,哈哈。




    Android開發完全講義(第2版)(本書版權已輸出到臺灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

    posted on 2010-11-09 16:25 銀河使者 閱讀(5344) 評論(1)  編輯  收藏 所屬分類: java 原創GoogleAndroid/OPhone

    評論

    # re: 關于Android中傳遞數據的一些討論  回復  更多評論   

    原來總是使用static是不好的習慣
    2012-03-10 12:29 | yangqinjiang
    主站蜘蛛池模板: 亚洲国产成人久久综合碰| 国产一卡2卡3卡4卡无卡免费视频| 国产性生交xxxxx免费| 精品国产日韩久久亚洲| 午夜国产精品免费观看| 亚洲乱码一二三四五六区| 桃子视频在线观看高清免费完整 | 性无码免费一区二区三区在线| 亚洲日韩VA无码中文字幕 | 国产精品亚洲一区二区三区久久 | 无码国产精品一区二区免费vr| 亚洲AV中文无码乱人伦下载 | 亚洲精品福利在线观看| 国产免费的野战视频| 亚洲人成网站看在线播放| 性做久久久久久免费观看| 亚洲日韩精品无码专区加勒比☆| 永久免费毛片手机版在线看| 男男黄GAY片免费网站WWW| 亚洲精品无码永久在线观看 | 亚洲一级黄色大片| 成人免费男女视频网站慢动作| 国产亚洲成在线播放va| 丝袜熟女国偷自产中文字幕亚洲| 七色永久性tv网站免费看| 亚洲另类春色国产精品| 在线观看永久免费视频网站| 一区二区3区免费视频| 亚洲高清在线视频| 精品久久久久成人码免费动漫| 国产91成人精品亚洲精品| 亚洲熟妇无码AV在线播放| 91福利免费体验区观看区| 亚洲hairy多毛pics大全| 激情97综合亚洲色婷婷五 | 午夜免费不卡毛片完整版| 一二三区免费视频| 亚洲沟沟美女亚洲沟沟| 免费国产人做人视频在线观看| 免费无码又爽又刺激高潮视频| 亚洲精品国产suv一区88|