Android采用Application总结一下
Application和Activity,Service由于是android框架的一個系統(tǒng)組件,當(dāng)android程序啟動時系統(tǒng)會創(chuàng)建一個 application對象。用來存儲系統(tǒng)的一些信息。通常我們是不須要指定一個Application的,這時系統(tǒng)會自己主動幫我們創(chuàng)建,假設(shè)須要創(chuàng)建自己 的Application。也非常easy創(chuàng)建一個類繼承 Application并在manifest的application標(biāo)簽中進(jìn)行注冊(僅僅須要給Application標(biāo)簽添加個name屬性把自己的 Application的名字定入就可以)。
? ? ? ? ?Android提供給開發(fā)程序猿的概念空間中Application僅僅是一個松散的表征概念,沒有多少實(shí)質(zhì)上的表征。
在Android實(shí)際空間中看不到實(shí)際意義上的應(yīng)用程序的概念,即使有一個叫Application的類,這個也就是個應(yīng)用程序上下文狀態(tài)。是一個極度弱化的概念。Application僅僅是一個空間范疇的概念。Application就是Activity。Service之類的組件上下文描寫敘述。Application并非Android的核心概念,而Activity才是Android的核心概念。
? ? ? 從Android的SDK文檔中。我們知道普通情況Android應(yīng)用程序是由下面四種組件構(gòu)造而成的:Activity,Broadcast Intent Receiver,服務(wù)(Service)。內(nèi)容提供器(Content Provider)。
android系統(tǒng)會為每一個程序執(zhí)行時創(chuàng)建一個Application類的對象且僅創(chuàng)建一個。所以Application能夠說是單例 (singleton)模式的一個類.且application對象的生命周期是整個程序中最長的。它的生命周期就等于這個程序的生命周期。由于它是全局 的單例的,所以在不同的Activity,Service中獲得的對象都是同一個對象。
所以通過Application來進(jìn)行一些。數(shù)據(jù)傳遞,數(shù)據(jù)共享 等,數(shù)據(jù)緩存等操作。
Application數(shù)據(jù)緩存
? ? ? 我通常會習(xí)慣在application中建立兩個HashMap一個用于數(shù)據(jù)的傳遞。一個用于緩 存一些數(shù)據(jù)。
比方有一個Activity須要從站點(diǎn)獲取一些數(shù)據(jù),獲取完之后我們就能夠把這個數(shù)據(jù)cache到Application 其中,當(dāng)頁面設(shè)置到其他Activity再回來的時候,就能夠直接使用緩存好的數(shù)據(jù)了。
但假設(shè)須要cache一些大量的數(shù)據(jù),最好是cache一些 (軟引用)SoftReference 。并把這些數(shù)據(jù)cache到本地rom上或者sd卡上。假設(shè)在application中的緩存不存在,從本地緩存查找,假設(shè)本地緩存的數(shù)據(jù)也不存在再從網(wǎng) 絡(luò)上獲取。
Android使用Application
?首先須要重寫Application,主要重寫里面的onCreate方法,就是創(chuàng)建的時候。初始化變量的值。然后在整個應(yīng)用中的各個文件里就能夠?qū)υ撟兞窟M(jìn)行操作了。 ?
? 啟動Application時。系統(tǒng)會創(chuàng)建一個PID,即進(jìn)程ID。全部的Activity就會在此進(jìn)程上執(zhí)行。那么我們在Application創(chuàng)建的時候初始化全局變量,同一個應(yīng)用的全部Activity都能夠取到這些全局變量的值,換句話說。我們在某一個Activity中改變了這些全局變量的值,那么在同一個應(yīng)用的其它Activity中值就會改變。
步驟:第一步、寫一個全局的單例模式的MyApplication繼承自Application 覆蓋onCreate ,在這種方法里面實(shí)例化Application?
? ? ? ? ? 第二步、配置全局的Context
Application 配置全局Context ?
第一步、寫一個全局的單例模式的MyApplication繼承自Application 覆蓋onCreate ,在這種方法里面實(shí)例化Application ?
第二步、配置全局的Context ?
<application
? ? ? ? android:name="com.example.utils.myapplication"
? ? ? ? android:allowBackup="true"
? ? ? ? android:icon="@drawable/ic_launcher"
? ? ? ? android:label="@string/app_name"
? ? ? ? android:theme="@style/AppTheme" >
</application> ?
第三步、使用,使用的時候用的時候依據(jù)類的名稱訪問Context ?
android.app.Application類包括了4個公開的方法
void ?onConfigurationChanged(Configuration newConfig)
void ?onCreate() ?//這里才是真正的入口點(diǎn)。
void ?onLowMemory()
void ?onTerminate()
說明:
? ? ? onCreate(); ?這個函數(shù)是當(dāng)我們的應(yīng)用開始之時就被調(diào)用了,比應(yīng)用中的其它對象創(chuàng)建的早。這個實(shí)現(xiàn)盡可能的快一點(diǎn)。由于這個時間直接影響到我們第一個activity/service/receiver。
假設(shè)你要重寫這種方法必須調(diào)用super.onCreate().
? ? ? onTerminate(): 這個函數(shù)是模擬一個過程環(huán)境,在真機(jī)中永遠(yuǎn)也不會被調(diào)用。
真正的Android入口點(diǎn)是application的main,你能夠看下androidmanifest.xml的包括關(guān)系就清楚了,并非每一個應(yīng)用都必須有Activity的。
/*** 全局application,為什么要用application。主要是由于這就像一個session。* 用于暫時保存各種傳值,serverurl,假設(shè)用數(shù)據(jù)庫或者其它的操作來保存這些* 數(shù)據(jù)的話管理起來就非常繁瑣,并且也不利于程序的執(zhí)行速度。* */
package com.example.utils;import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Application;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.StrictMode;public class myapplication extends Application {private UsersDBManager UsersDBManager1;private SystemDBManager SystemDBManager1;private SubmitDBManager submitDBManager1;/*** 為了全然退出程序調(diào)用方法 myapplication1.getInstance().addActivity(this);* myapplication1.getInstance().exit();*/private static myapplication instance;private List<Activity> activityList = new LinkedList<Activity>();public myapplication() {}// 單例模式獲取唯一的MyApplication實(shí)例public static myapplication getInstance() {if (null == instance) {instance = new myapplication();}return instance;}// 加入Activity到容器中public void addActivity(Activity activity) {activityList.add(activity);}// 遍歷全部Activity并finishpublic void exit() {for (Activity activity : activityList) {activity.finish();}System.exit(0);}@SuppressLint("NewApi")@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();UsersDBManager1 = new UsersDBManager(this);SystemDBManager1 = new SystemDBManager(this);submitDBManager1 = new SubmitDBManager(this);// 初始化全局變量try {/*** 加入網(wǎng)絡(luò)權(quán)限,安卓4.03必須*/StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());/*** 加入網(wǎng)絡(luò)權(quán)限,安卓4.03必須*/} catch (Exception e) {e.printStackTrace();}}}application中有幾個變量和對應(yīng)的setter?getter方法。
在其它activity之后調(diào)用例如以下
myapplication = (myapplication) getApplication();myapplication.getInstance().addActivity(this);版權(quán)聲明:本文博主原創(chuàng)文章,博客,未經(jīng)同意不得轉(zhuǎn)載。
轉(zhuǎn)載于:https://www.cnblogs.com/blfshiye/p/4947044.html
總結(jié)
以上是生活随笔為你收集整理的Android采用Application总结一下的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腕开头的成语有哪些啊?
- 下一篇: asp.net httpmodule 访