教你怎麼使用apilication—紀念火影-->影子模仿術

來源:互聯網
上載者:User

標籤:application   代碼最佳化   

影子模仿術——鹿丸的絕招

奈良一族密傳的忍術,藉由伸長自己的影子來與敵方的連結,使對方作出和自己相同動作的奇特忍術。


其實對於安卓來說,入口並不是activity的Oncreate,而是aplication 大家可以看看設定檔,最先的並不是activity。

其實我第一次看怎麼使用aplication的時候,總覺得有點像單例模式,或者是說,aplication就是拿著單例的原理 造就了他的特性嗎?

他就像影子模仿術一樣,它裡面存放著全域變數,不管是誰,只要是他的子類,只要在一個進程,都可以共用一個值。

官方解釋:

android.app.Application類和Activity,Service一樣是Android架構的一個系統組件,當Android程式啟動時系統會建立一個Application對象,用來儲存系統的一些資訊。

Android系統自動會為每個程式運行時建立一個Application類的對象且只建立一個,所以Application可以說是單例(singleton)模式的一個類。


啟動Application時,系統會建立一個PID,即進程ID,所有的Activity都會在此進程上運行。那麼我們在Application建立的時候初始化全域變數,同一個應用的所有Activity都可以取到這些全域變數的值,換句話說,我們在某一個Activity中改變了這些全域變數的值,那麼在同一個應用的其他Activity中值就會改變。Application對象的生命週期是整個程式中最長的,它的生命週期就等於這個程式的生命週期。因為它是全域的單例的,所以在不同的Activity,Service中獲得的對象都是同一個對象。因此可以通過Application來進行一些,如:資料傳遞、資料共用和資料緩衝等操作。



好了 開始正題:


首先建立一個類, MyApp類,繼承Application


package com.example.aplicationdemo;import android.app.Application;import android.util.Log;/** *  * *整個應用的內容物件 */public class MyApp extends Application{    private static final MyApp instance = new MyApp();         /**     * 全域變數     */    private String name = "JDK";         /*     * android應用程式真正入口。     * 此方法在所有activity,servie,receiver組件之前調用     * */    @Override    public void onCreate()    {        super.onCreate();//必須調用父類方法        Log.i("CREATE","application created....");    }              /**     * 此方法方便在那些沒有context對象的類中使用     * @return MyApp執行個體     */    public static MyApp getApplicationInstance()    {        return instance;    }         /* setter/getter 方法 */    public String getName()    {        return name;    }    public void setName(String name)    {        this.name = name;    }     }

其中getset方法是給你提供修改值用的

注意的是 建完myapp類以後再 設定檔 註冊下 在aplication下加一個name屬性即可

  <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:name="com.example.aplicationdemo.MyApp"        android:label="@string/app_name"        android:theme="@style/AppTheme" >

2.接著我們在MainActivity 執行個體化 進行輸出值看一下

package com.example.aplicationdemo;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;public class MainActivity extends Activity {    private static final String TAG = "MainActivity";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Log.i("CREATE","activity created...");       <span style="color:#FF0000;"> MyApp app1 = (MyApp) this.getApplication();        app1.setName("xxx");</span>        Log.i(TAG,"方式一:"+app1.getName());         //        MyApp app2 = (MyApp) this.getApplicationContext();//        Log.i(TAG,"方式二:"+app2.getName());//         //        MyApp app3 = MyApp.getApplicationInstance();//用在擷取不到context對象的類中//        Log.i(TAG,"方式三:"+app3.getName());    }    public void btn(View view){    Intent intent=new Intent(MainActivity.this,main2.class);    startActivity(intent);    finish();    }}

輸出值

11-10 15:38:55.099: I/MainActivity(2475): 方式一:xxx 

LOG 列印 說明我們成功了。

然後我們通過 button 點擊 進入下一個activity 實驗能否成功 修改值

package com.example.aplicationdemo;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;public class main2 extends Activity {private static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);  MyApp app1 = (MyApp) this.getApplication();  app1.setName("張泰");        Log.i(TAG,"方式一:"+app1.getName());}  public void btn(View view){    Intent intent=new Intent(main2.this,main3.class);    startActivity(intent);    finish();    }}

11-10 15:40:38.447: I/MainActivity(2475): 方式一:張泰
可以看到成功了 

我們再點擊下一個頁面試試

11-10 15:41:05.307: I/MainActivity(2475): 方式一:清哥

有成功了


這說明 aplication 設定的值 是可以全域 可用的 而且也可以被修改,思維發散下 aplication通常可以放入 一個entry類 或者 地圖的location


教你怎麼使用apilication—紀念火影-->影子模仿術

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.