亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android編程實現(xiàn)全局獲取Context及使用Intent傳遞對象的方法詳解

 更新時間:2017年08月09日 11:03:41   作者:woider  
這篇文章主要介紹了Android編程實現(xiàn)全局獲取Context及使用Intent傳遞對象的方法,結合實例形式分析了Android全局Context的獲取及Intent傳遞對象的具體操作方法,需要的朋友可以參考下

本文實例講述了Android編程實現(xiàn)全局獲取Context及使用Intent傳遞對象的方法。分享給大家供大家參考,具體如下:

一、全局獲取 Context

Android 開發(fā)中很多地方需要用到 Context,比如彈出 Toast、啟動活動、發(fā)送廣播、操作數(shù)據(jù)庫……

由于很多操作都是在活動中進行的,而活動本身就是一個 Context 對象,所以獲取 Context 并不是那么困難。

但是,當應用程序的架構逐漸開始復雜起來的時候,很多的邏輯代碼都將脫離 Activity 類,由此在某些情況下,獲取 Context 并非那么容易。

Android 提供了一個 Application 類,每當應用程序啟動的時候,系統(tǒng)就會自動將這個類進行初始化。而我們可以定制一個自己的 Application 類,以便管理程序內一些全局的狀態(tài)信息,比如說全局 Context。

public class MyApplication extends Application {
  private static Context context;
  @Override
  public void onCreate() {
    super.onCreate();
    context =getApplicationContext();
  }
  public static Context getContext() {
    return context;
  }
}

這里我們重寫了父類的 onCreate()方法,并通過調用 getApplicationContext()方法得到了一個應用程序級別的 Context,然后又提供了一個靜態(tài)的 getContext()方法,在這里將剛才獲取到的 Context 進行返回。

接下來需要告知系統(tǒng),當程序啟動的時候應該初始化 MyApplication 類,在 AndroidManifest 文件的<application>標簽下進行指定就可以了。

<application android:name="MyApplication"> ... </application>

這樣就已經實現(xiàn)了一種全局獲取 Context 的機制,之后不管你想在項目的任何地方使用 Context,只需要調用一下 MyApplication.getContext()就可以了。

復制代碼 代碼如下:
Toast.makeText(MyApplication.getContext(),"全局Context獲取成功",Toast.LENGTH_SHORT).show();

二、使用Intent傳遞對象

使用 Intent 來傳遞對象通常有兩種實現(xiàn)方式,Serializable 和 Parcelable。

Serializable方式:

Serializable 是序列化的意思,表示將一個對象轉換成可存儲或可傳輸?shù)臓顟B(tài)。序列化后的對象可以在網絡上進行傳輸,也可存儲到本地。至于序列化的方法也很簡單,只需要讓一個類去實現(xiàn) Serizable 這個接口就可以了。

public class Festival implements Serializable {
  private String name;
  private String data;
  public Festival(String name,String data){
    this.name = name;
    this.data = data;
  }
  public String getName() {
    return name;
  }
  public String getData() {
    return data;
  }
}

這里讓 Festival 類實現(xiàn)了 Serializable 接口,這樣所有的 Festival 對象就都是可以序列化的了。

Festival festival = new Festival("元旦節(jié)","1月1日");
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("festival_object",festival);
startActivity(intent);

這里我們創(chuàng)建了一個 Festival 的實例,然后就直接將它傳入到 putExtra()方法中,通過 startActivity()傳遞這個對象。

復制代碼 代碼如下:
Festival festival = (Festival)getIntent().getSerializableExtra("festival_object");

這里調用了 getSerializableExtra()方法來獲取傳遞過來的序列化對象,接著再將它向下轉型成 Festival 對象,這樣就成功實現(xiàn)了使用 Intent 傳遞對象的功能了。

Parcelable方式:

Parcelable 方式的實現(xiàn)原理是將一個完整的對象進行分解,而分解后的每一部分都是 Intent 所支持的數(shù)據(jù)類型,這樣也就實現(xiàn)傳遞對象的功能了。

public class Person implements Parcelable {
  private String name;
  private int age;
  //省略set和get方法
  protected Person(Parcel in) {
    name = in.readString();//讀取name
    age = in.readInt();//讀取age
  }
  public static final Creator<Person> CREATOR = new Creator<Person>() {
    @Override
    public Person createFromParcel(Parcel in) {
      return new Person(in);
    }
    @Override
    public Person[] newArray(int size) {
      return new Person[size];
    }
  };
  @Override
  public int describeContents() {
    return 0;
  }
  @Override
  public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(name);//寫出name
    dest.writeInt(age);//寫入age
  }
}

首先讓 Person 類實現(xiàn) Parcelable 接口,這樣就必須重寫 describeContents()writeToParcel()這兩個方法。其中describeContents()方法直接返回 0 就可以了,而 writeToParcel()方法中需要調用 Parcel 的 writeXxx()方法將 Person 類中的字段一一寫出。

除此之外,還必須在 Person 類中提供一個名為 CREATOR 的常量,這里創(chuàng)建了 Parcelable.Creator 接口的一個實現(xiàn),并將泛型指定為 Person。

接著需要重寫 createFromParcel()newArray()這兩個方法,在 createFromParcel()方法中去讀取剛才寫出的 name 和 age 字段,并創(chuàng)建一個 Person 對象進行返回,其中 name和age都是調用 Parcel 的 readXxx()方法讀取到的,注意這里的讀取順序一定要和寫出順序完全相同。而newArray()方法中只需要new出一個Person數(shù)組,并使用方法中傳入的 size 作為數(shù)組大小就可以了。

復制代碼 代碼如下:
Person person = (Person)getIntent().getParcelableExtra("person_object");

依然可以使用相同的代碼來傳遞 Person 對象,只不過獲取對象時調用的是 getParcelableExtra() 方法,其他地方完全相同。

在傳遞對象時,Serializable 和 Parcelable 方法都是可行的,對比一下,Serializable 的方式較為簡單,但由于會把整個對象進行序列化,因此效率方面會比 Parcelable方式低一些,根據(jù)情況需要合理運用這兩種方式。

更多關于Android相關內容感興趣的讀者可查看本站專題:《Android開發(fā)入門與進階教程》、《Android調試技巧與常見問題解決方法匯總》、《Android基本組件用法總結》、《Android視圖View技巧總結》、《Android布局layout技巧總結》及《Android控件用法總結

希望本文所述對大家Android程序設計有所幫助。

相關文章

  • 詳解Android Studio實現(xiàn)用戶登陸界面demo(xml實現(xiàn))

    詳解Android Studio實現(xiàn)用戶登陸界面demo(xml實現(xiàn))

    這篇文章主要介紹了詳解Android Studio實現(xiàn)用戶登陸界面demo,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • Android中TextView文本高亮和點擊行為的封裝方法

    Android中TextView文本高亮和點擊行為的封裝方法

    這篇文章主要介紹了Android中TextView文本高亮和點擊行為的封裝方法,文中介紹的非常詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • Android 調用notifyDataSetChanged方法失敗解決辦法

    Android 調用notifyDataSetChanged方法失敗解決辦法

    這篇文章主要介紹了Android 調用notifyDataSetChanged方法失敗解決辦法的相關資料,需要的朋友可以參考下
    2017-07-07
  • Android自定義驗證碼輸入框的方法實例

    Android自定義驗證碼輸入框的方法實例

    這篇文章主要給大家介紹了關于Android自定義驗證碼輸入框的相關資料,文中通過實例代碼介紹的非常詳細,對各位Android開發(fā)者們具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02
  • Android在啟動adb時失敗解決方案

    Android在啟動adb時失敗解決方案

    這篇文章主要介紹了Android在啟動adb時失敗解決方案的相關資料,需要的朋友可以參考下
    2015-02-02
  • Android中Socket的應用分析

    Android中Socket的應用分析

    這篇文章主要介紹了Android中Socket的應用,結合實例形式分析了Android中socket通信的實現(xiàn)技巧與相關注意事項,需要的朋友可以參考下
    2016-10-10
  • Android Studio項目適配AndroidX(Android 9.0)的方法步驟

    Android Studio項目適配AndroidX(Android 9.0)的方法步驟

    這篇文章主要介紹了Android Studio項目適配AndroidX(Android 9.0)的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • Android空心圓及層疊效果實現(xiàn)代碼

    Android空心圓及層疊效果實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了Android空心圓及層疊效果實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 解決Android 沉浸式狀態(tài)欄和華為虛擬按鍵沖突問題

    解決Android 沉浸式狀態(tài)欄和華為虛擬按鍵沖突問題

    對于現(xiàn)在的 App 來說,布局頁面基本都會用到沉浸式狀態(tài)欄,單純的沉浸式狀態(tài)欄很容易解決,但是在華為手機上存在一個底部虛擬按鍵的問題,會導致頁面底部和頂部出現(xiàn)很大的問題,下面通過本文給大家分享Android 沉浸式狀態(tài)欄和華為虛擬按鍵沖突問題,一起看看吧
    2017-07-07
  • android 設置全屏的兩種方法

    android 設置全屏的兩種方法

    現(xiàn)在android的每一個項目都會需要設置為全屏,現(xiàn)在介紹兩種設置為全屏的方式
    2014-05-05

最新評論