Android -- Context(Application的應用)

來源:互聯網
上載者:User

標籤:android   application   

Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents

是一個用來訪問全域資訊的介面(圖片資源、資訊資源),一些比較常用的組件繼承Context介面。

Application

和Activity,Service一樣是android架構的一個系統組件,當android程式啟動時系統會建立一個 application對象,用來儲存系統的一些資訊。通常我們是不需要指定一個Application的,這時系統會自動幫我們建立,如果需要建立自己 的Application,也很簡單建立一個類繼承 Application並在manifest的application標籤中進行註冊(只需要給Application標籤增加個name屬性把自己的 Application的名字定入即可)。

android系統會為每個程式運行時建立一個Application類的對象且僅建立一個,所以Application可以說是單例 (singleton)模式的一個類.且application對象的生命週期是整個程式中最長的,它的生命週期就等於這個程式的生命週期。因為它是全域 的單例的,所以在不同的Activity,Service中獲得的對象都是同一個對象。所以通過Application來進行一些,資料傳遞,資料共用 等,資料緩衝等操作。

下面我們通過一個執行個體,來實現Application的資料共用。
1、我們建立一個對象,繼承Application

package com.example.learncontext;import android.app.Application;public class App extends Application {    private String name = "default";    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

2、我們需要配置AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.learncontext"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="21" />    <application        android:name=".App"        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name=".MainActivity"            android:label="main1" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity            android:name=".BMainActivity"            android:label="main2" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>

代碼中的12行,這裡我們需要配置上我們建立Application對象的路徑。
代碼17到35行,我們可以看出配置2個activity,並且都是入口程式,詳見intent-filter中的代碼。目的是為了在手機上展示2個應用入口表徵圖,便於測試Application的資料共用。

3、下面是2個Activity的VIEW視圖,每個VIEW頁面增加1個textview、1個editview、1個button

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".BMainActivity" >    <TextView        android:id="@+id/textView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/hello_world" />    <EditText        android:id="@+id/editText1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignLeft="@+id/textView1"        android:layout_below="@+id/textView1"        android:layout_marginTop="27dp"        android:ems="10" />    <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignLeft="@+id/editText1"        android:layout_below="@+id/editText1"        android:layout_marginLeft="18dp"        android:layout_marginTop="28dp"        android:text="Button" /></RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".BMainActivity" >    <TextView        android:id="@+id/textView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/hello_world" />    <EditText        android:id="@+id/editText1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignLeft="@+id/textView1"        android:layout_below="@+id/textView1"        android:layout_marginTop="27dp"        android:ems="10" />    <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignLeft="@+id/editText1"        android:layout_below="@+id/editText1"        android:layout_marginLeft="18dp"        android:layout_marginTop="28dp"        android:text="Button" /></RelativeLayout>

4、下面是2個activity中的代碼

package com.example.learncontext;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.widget.EditText;import android.widget.TextView;public class BMainActivity extends Activity {    private TextView textView;    private EditText editText;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_bmain);        textView = (TextView) findViewById(R.id.textView1);        editText = (EditText) findViewById(R.id.editText1);        textView.setText("擷取到的共用資料是:"                + ((App) getApplicationContext()).getName());        findViewById(R.id.button1).setOnClickListener(                new View.OnClickListener() {                    @Override                    public void onClick(View v) {                        ((App) getApplicationContext()).setName(editText                                .getText().toString());                        textView.setText("擷取到的共用資料是:"                                + ((App) getApplicationContext()).getName());                    }                });    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.bmain, menu);        return true;    }}
package com.example.learncontext;import android.app.Activity;import android.app.Application;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.widget.EditText;import android.widget.TextView;public class MainActivity extends Activity {    private TextView textView;    private EditText editText;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        textView = (TextView) findViewById(R.id.textView1);        editText = (EditText) findViewById(R.id.editText1);        textView.setText("擷取到的共用資料是:"                + ((App) getApplicationContext()).getName());        findViewById(R.id.button1).setOnClickListener(                new View.OnClickListener() {                    @Override                    public void onClick(View v) {                        ((App) getApplicationContext()).setName(editText                                .getText().toString());                        textView.setText("擷取到的共用資料是:"                                + ((App) getApplicationContext()).getName());                    }                });    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }}

程式中30行代碼,((App) getApplicationContext()),強轉成App對象,然後擷取對象中的屬性,通過put或get方法達到資料共用的儲存和讀取操作。

5、測試圖如下



Android -- Context(Application的應用)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.