在最近的Android項目中,有些代碼需要從程序的運行周期開始一直到運行周期結束;比如說本地數據庫的初始化,從服務器獲取數據等;可以說Application對象的生命周期是整個程序中最長的,它的生命周期就等於這個程序的生命周期於是就引出了Application這個類,當程序啟動的時候系統會創建一個Application對象,用來存儲系統的一些信息,一般來說是不需要我們指定一個Application的,系統會自動幫我們創建,但如果我們需要在程序啟動時,運行一些全局代碼時,可以創建一個自己的Application類並繼承Application, 而且需要重寫onCreate函數,另外需要在mainifest中的application標簽中進行注冊(給application標簽增加name屬性把自己的Application的名字加進來就可以了),注冊完成后,啟動Application,系統會為我們創建一個進程,所有的Activity都會在此進程上運行,那么我們在Application創建的時候初始化全局變量,同一個應用的所有Activity都可以取到這些全局變量,換句話說,我們在某一個Activity中改變了這些全局變量的值,那么在同一個應用的其他Activity中的值就會改變。則會調用我們重寫的onCreate()函數,在這個函數中可以去具體實現我們想要實現的邏輯。
下面是我自定義的一個Application對象用來獲取全局的上下文用於SharePreferences本地文件的存儲
一.布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/text_write" android:layout_width="250dp" android:layout_height="wrap_content" /> <Button android:id="@+id/btn_write" android:layout_width="120dp" android:layout_height="wrap_content" android:text="寫入"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/text_read" android:layout_width="250dp" android:layout_height="wrap_content"/> <Button android:id="@+id/btn_read" android:layout_width="120dp" android:layout_height="wrap_content" android:text="讀入"/> </LinearLayout> </LinearLayout>
二. Application
package lonbon.com.myapplication; import android.app.Application; import android.content.Context; public class MyApplication extends Application { private static Context context; //獲取上下文 public static Context getAppContext(){ return context.getApplicationContext(); } @Override public void onCreate() { super.onCreate(); context = this; } }
三.主界面
package lonbon.com.myapplication; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private static final String TAG = "MainActivity"; private static final String WRITE_TEXT = "WRITE_TEXT"; private EditText writeText; private EditText readText; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); Button btnWrite = (Button)findViewById(R.id.btn_write); Button btnRead = (Button)findViewById(R.id.btn_read); writeText = (EditText)findViewById(R.id.text_write); readText = (EditText)findViewById(R.id.text_read); btnWrite.setOnClickListener(this); btnRead.setOnClickListener(this); //隱藏任務標題欄 ActionBar actionBar = getSupportActionBar(); if(actionBar != null){ actionBar.hide(); } } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_write: String write = writeText.getText().toString(); SharePreferencesUntils.putString(WRITE_TEXT, write); Toast.makeText(this, "寫入成功", Toast.LENGTH_SHORT).show(); break; case R.id.btn_read: String read = SharePreferencesUntils.getString(WRITE_TEXT, ""); if(!TextUtils.isEmpty(read)){ readText.setText(read); Toast.makeText(this, "讀取成功", Toast.LENGTH_SHORT).show(); } break; } } }
四.SharePreferences封裝類
package lonbon.com.myapplication; import android.content.Context; import android.content.SharedPreferences; public class SharePreferencesUntils { public static final String NAME = "user"; //存入:String類型 public static void putString(String key, String value){ SharedPreferences sp = MyApplication.getAppContext().getSharedPreferences(NAME,Context.MODE_PRIVATE); sp.edit().putString(key,value).apply(); } //獲取:String類型 public static String getString(String key, String defValue){ SharedPreferences sp = MyApplication.getAppContext().getSharedPreferences(NAME,Context.MODE_PRIVATE); return sp.getString(key,defValue); } //存入:int類型 public static void putInt(String key, int value){ SharedPreferences sp = MyApplication.getAppContext().getSharedPreferences(NAME,Context.MODE_PRIVATE); sp.edit().putInt(key,value).apply(); } //獲取:int類型 public static int getInt(String key, int defValue){ SharedPreferences sp = MyApplication.getAppContext().getSharedPreferences(NAME,Context.MODE_PRIVATE); return sp.getInt(key,defValue); } //存入:boolean類型 public static void putBoolean(String key, boolean value){ SharedPreferences sp = MyApplication.getAppContext().getSharedPreferences(NAME,Context.MODE_PRIVATE); sp.edit().putBoolean(key,value).apply(); } //獲取:boolean類型 public static boolean getBoolean(String key, boolean defValue){ SharedPreferences sp = MyApplication.getAppContext().getSharedPreferences(NAME,Context.MODE_PRIVATE); return sp.getBoolean(key,defValue); } //刪除 單個 public static void deleShare(String key){ SharedPreferences sp = MyApplication.getAppContext().getSharedPreferences(NAME,Context.MODE_PRIVATE); sp.edit().remove(key).apply(); } //刪除 全部 public static void deleAll(){ SharedPreferences sp = MyApplication.getAppContext().getSharedPreferences(NAME,Context.MODE_PRIVATE); sp.edit().clear().apply(); } }
五.動態演示