『壹』 在android中如何使用全局變數--Application context (轉)
可以將變數存放在Application中,Context,中文直譯為「上下文」,SDK中對其說明如下:
Interface to global information about an application environment. This is an abstract class whose implementation
is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls
for application-level operations such as launching activities, broadcasting and receiving intents, etc。
從上可知一下三點即:
1、它描述的是一個應用程序環境的信息,即上下文。
2、該類是一個抽象(abstract class)類,Android提供了該抽象類的具體實現類(後面我們會講到是ContextIml類)。
3、通過它我們可以獲取應用程序的資源和類,也包括一些應用級別操作,例如:啟動一個Activity,發送廣播,接受Intent信息等。
以下為使用Application存儲全局變數的示例代碼:
1.繼承Application,並在Application里聲明全局變數。
public class MyApplication extends Application {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
2.在AndroidManifest.xml的application節點中聲明這個Application。
<application android:name="com.xxx.xxx.MyApplication">
3.在Activity中獲取Application對象,並存取全局變數。
User user = new User();
user.setUserName("example");
MyrApplication app= (MyApplication ) getApplicationContext();
app.setUser(user); //將變數存到application
User tmp = app.getUser();//從application中讀取全局變數。
『貳』 Android Thread中讀取到的數據,賦值給一個全局變數,再使用全局變數的時候,第一次為空,怎麼保證有數據
將result的值通過msg和handler傳到主線程就可以了
『叄』 android使用全局變數.求解答@慈稅。
使用靜態類:
調用就不再寫了,直接使用類名.變數名就可以調用!
static修飾的靜態變數,使用很方便,在不同的類和包中都可以使用,在虛擬機中單獨佔用內存,沒錯,這些都是它們的優點,不過在項目上線後,才發現static有一些不太好的地方。
在查看項目的崩潰信息時,發現很多地方莫明的出現空指針異常的錯誤,經過排查,發現可能就是static的問題。我們在項目中,將用戶的信息也就是User對象保存成了一個靜態變數,而在報錯的地方,也都發現有使用過這種變數,因此,可以大致推斷出與這種保存的方式有一定的聯系。同時,有不少用戶反映在打開應用的情況下,接個電話或者長時間待機後,再回到應用也會出現崩潰的現象,而這些崩潰都與靜態變數的空指針有關系。
如此來說的話,static靜態修飾在Android的開發中是不是很危險?或許我們可以說如果是static User u = new User();這樣定義的話,那麼應該不會有太大問題,而如果是static User u;這樣定義的話,那麼很可以會出現NULL的現象。當然,前面的方法裡面的屬性也可能會現空的情況,但是這個可以用封裝來避免空指針。另外靜態常量還是很好用的。
那麼應該如何保存登錄或者全局的信息呢?根據Google官方的推薦以及網路到的各位大神的推薦,我們應該盡量使用繼承自Application的自定義類,在我們繼承的類中定義需要全局使用的變數,並通過getApplicationContext()來獲取和保存相關的變數即可。
2.使用Application
不過,為了讓我們的MyApplication取代android.app.Application的地位,在我們的代碼中生效,我們需要修改AndroidManifest.xml:
下面我們就可以在Activity或Service中靈活使用了:
而且按照Java及C#的種編輯思想的話,還是建議使用第二種試,這樣對於系統的安全是好的!而且我查了一些資料顯示,這樣也是符合Android這種思想的,因此建議使用第二種方式,設置公共變數!
Application是與應用同時存在的,也就是應用在它就在,並不會被GC給莫名其妙的回收掉,因此,使用此方法更加安全。
閱讀全文
『肆』 android如何從本地變數存儲在全局變數
Android提供了一個類似於ServletContext的全局變數,叫Application。可以利用它存儲一些全局變數!
示例:
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import android.app.Application;
public class MyApplication extends Application {
private Map<String, Object> mData;
public Map<String, Object> getmData() {
return mData;
}
@Override
public void onCreate() {
super.onCreate();
mData = new HashMap<String, Object>();
//synchronized the map
mData = Collections.synchronizedMap(mData);
// then restore your map
}
public void onTerminate() {
super.onTerminate();
//save data of the map
}
}
然後在AndroidManifest裡面配置<application>節點的屬性
<application android:name=".MyApplication">
『伍』 androidapp如何存儲數據作為全局變數,在各個activity中調用
Android提供了一個類似於ServletContext的全局變數,叫Application。可以利用它存儲一些全局變數!
示例:
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import android.app.Application;
public class MyApplication extends Application {
private Map<String, Object> mData;
public Map<String, Object> getmData() {
return mData;
}
@Override
public void onCreate() {
super.onCreate();
mData = new HashMap<String, Object>();
//synchronized the map
mData = Collections.synchronizedMap(mData);
// then restore your map
}
public void onTerminate() {
super.onTerminate();
//save data of the map
}
}
然後在AndroidManifest裡面配置<application>節點的屬性
<application android:name=".MyApplication">