編輯:關於Android編程
在activity之間數據傳遞中還有一種比較實用的方式,就是全局對象application
Application和Activity,Service一樣是Android框架的一個系統組件,當Android程序啟動時系統會創建一個Application對象,用來存儲系統的一些信息。
Android系統自動會為每個程序運行時創建一個Application類的對象且只創建一個,所以Application可以說是單例(singleton)模式的一個類。
通常我們是不需要指定一個Application的,系統會自動幫我們創建,如果需要創建自己的Application,那也很簡單!創建一個類繼承Application並在AndroidManifest.xml文件中的application標簽中進行注冊(只需要給application標簽增加name屬性,並添加自己的 Application的名字即可)。
啟動Application時,系統會創建一個PID,即進程ID,所有的Activity都會在此進程上運行。那麼我們在Application創建的時候初始化全局變量,同一個應用的所有Activity都可以取到這些全局變量的值,換句話說,我們在某一個Activity中改變了這些全局變量的值,那麼在同一個應用的其他Activity中值就會改變。
Application對象的生命周期是整個程序中最長的,它的生命周期就等於這個程序的生命周期。因為它是全局的單例的,所以在不同的Activity,Service中獲得的對象都是同一個對象。所以可以通過Application來進行一些,如:數據傳遞、數據共享和數據緩存等操作。
除非是android應用程序清除內存,否則全局對象將一直可以訪問。
通過下面這個例子了解一下全局變量
新建一個MyApplication類並使其繼承Application
package com.example.activity; import java.util.HashMap; import android.app.Application; public class MyApplication extends Application{ /* * 創建一個map集合 * */ private static HashMapmap=new HashMap (); private static MyApplication application; /* * 返回application * */ public static MyApplication getApplication(){ return application; } /* * 返回map集合 * */ public static HashMap getMap(){ return map; } /* * 對於一個應用來說 android入口並不是Activity中的OnCreate()而是Application裡面的Oncreate() * 也就相當於是java中的Main方法,只不過這個方法被封裝了 * */ @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); //在Application創建時,讀取Application application=this; } }
在MainActivity中添加一個按鈕 並為其添加監聽事件,點擊後跳轉到OtherActivity
點擊事件的代碼為
Intent intent=new Intent(); intent.setClass(MainActivity.this, OtherActivity.class); MyApplication app=MyApplication.getApplication(); app.getMap().put("姓名", "蘇蘇"); app.getMap().put("星座", "雙魚座"); startActivity(intent);點擊按鈕後跳轉到OtherActivity ,並在Activity中輸出Map集合中的對象
Toast.makeText(OtherActivity.this, app.getMap().get("姓名")+" "+app.getMap().get("星座"), Toast.LENGTH_LONG).show();
protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); app.getMap().remove("姓名"); app.getMap().remove("星座"); }
前言我們開發人員在實際項目過程中遇到的需求是多種多樣的,有時我們要匹配APP自己的設計風格,有時我們會覺得系統的對話框使用起來不夠自由,因此自己定義一個適合自己的Dial
關於Dagger,在之前的博文(Android 依賴注入:Dagger 實例講解(Demo下載))中已有介紹, 本文說的Dagger 2主要是由Google
surface,這個單詞的意思是浮在表面的,那麼surfaceview就是浮在表面的view了。如果真的這樣解釋,估計有人要拍磚了。然而,話雖不能這麼說,取這個名兒,多少
目前幾乎所有的APP在用戶注冊時都會有設置頭像的需求,大致分為三種情況:(1)通過獲取本地相冊的圖片,經過裁剪後作為頭像。(2)通過啟動手機相機,現拍圖片然後裁剪作為頭像