Android中Application類的使用


在最近的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();
    }

}

五.動態演示


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM