怎麼獲取Android應用程式的上下文
前面我做了一個類似於騰訊QQ一樣的聊天應用,在這個應用裡面,有很多activity,而這些activity之間經常要進行互相啟動、往復跳轉、還有就是通過Notification啟動。當activity多了之後,如果設定他的模式為單例模式,或者不設定模式。在反覆啟動後會出現數據不同步、fc等各種未知的錯誤。於是我們就想過一種辦法就是通過儲存一個Context,然後每次啟動一個新activity之後再關閉原來的activity(注:關閉的這個activity,是不會再通過返回鍵之類的操作來顯示的activity)。還有就是當我們啟動的activity太多,然後又退出程式之後,如果後臺service收到新訊息而再次啟動聊天介面的activity也會出現fc的情況,在這種情況下我們也需要在退出應用的時候逐個退出開啟的activity。在我們退出activity的時候需要什麼?就是需要上下文,那我們應該儲存什麼樣的上下文才比較好呢,我們不能只僅僅單單的儲存某一個activity的上下文吧?
1、首先我們建立一個工程:Amir。可以生成一個空白的activity,也可以不用。然後在工程下建立一個AppContext.java類,並且繼承於Application。
2、在AppContext.java類中建立一個靜態方法,插入如下一段程式碼:
package com.amir.application; import android.app.Application; public class AppContext extends Application { //建立一個靜態私有變數用於儲存上下文例項 private static AppContext instance; //建立一個靜態方法,用於返回所需要的上下文例項 public static AppContext getInstance(){ return instance; } @Override public void onCreate() { super.onCreate(); //將應用程式本身的上下文例項賦值給instance變數 this.instance = AppContext.this; } }
3、在Manifest.xml檔案當中,在<Application>標籤當中加入name屬性為:android:name="com.amir.application.AppContext"
<application android:name="com.amir.application.AppContext" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
4、我們在應用程式中任何一個地方都可以通過AppContext.getInstance();獲得上下文。然後我們就可以通過上下文.finish()等方法進行關閉activity。
以上是我使用過的最方便,也是最常見的辦法。在專案中推薦使用一些比較規範而且簡單的方法來達到同樣的目的。小智慧大用途,積少成多就會寫一手漂亮的code.
作者:Amir
部落格:http://blog.csdn.net/amir_zt/
以上原創,轉載請註明出處,謝謝。
http://blog.csdn.net/amir_zt/article/details/10366227