1. 程式人生 > >怎麼獲取Android應用程式的上下文

怎麼獲取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