Android使用Application的好處


如果一個應用程序有2個入口的,1個入口程序打開修改其中的內容,怎么實現另一個入口的數據也修改呢?

下面就用到Application來實現數據的共享,因為一個應用程序只有一個Application,Application還有一個更重要的功能就是數據的初始化

Application的oncreate的函數比activity的函數早執行

 public void onCreate() {
        super.onCreate();
        System.out.println("App oncreate");
    }

下面來看一下如何實現2個應用程序直接的數據共享:

首先MainActivity,把MainActivity的xml文件修改為main1.xml

然后新建第二個Activity,命名為Main2,

然后是布局,main1.xml和main2.xml的布局一樣

<?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">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/textView" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editText" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="保存"
        android:id="@+id/btsave" />
</LinearLayout>

然后新建一個java文件,命名為App,繼承自Application

public class App extends Application {
    private String textData="default";
    public String getTextData() {
        return textData;
    }
    public void setTextData(String textData) {
        this.textData = textData;
    }

    //application的oncreate的函數比activity的函數早執行
    @Override
    public void onCreate() {
        super.onCreate();
        System.out.println("App oncreate");
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
    }
    @Override
    public void onLowMemory() {
        super.onLowMemory();
    }
    //內存清理的時候
    @Override
    public void onTrimMemory(int level) {
        super.onTrimMemory(level);
    }

}

 

這里需要注意的一點就是我們需要把這個App類注冊到AndroidManifest中,只用這樣我們才能夠實現數據的共享:AndroidManifest中的內容如下:

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yb.DataStorage">

    <application
        android:name="com.example.yb.DataStorage.App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
      <!--  //會在界面上呈現2個圖標,都是程序的入口-->
        <activity
            android:name="com.example.yb.DataStorage.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="com.example.yb.DataStorage.Main2"
            android:label="Main2">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".ServiceActivity"></activity>
    </application>

</manifest>

這個應用程序中,會有2個入口。因為我們在2個activity中,我們都注冊了相同的內容:

<intent-filter>
       <action android:name="android.intent.action.MAIN" />

       <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>

 

下面是MainActivity的,main2和MainActivity一樣,只要改下 setContentView(R.layout.main1);

public class MainActivity extends AppCompatActivity {

    private TextView tv;
    private EditText ed;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        System.out.println("Main1 oncreate");
        setContentView(R.layout.main1);

        tv= (TextView) findViewById(R.id.textView);
        ed= (EditText) findViewById(R.id.editText);

        tv.setText("共享的數據是:"+getApp().getTextData());

        findViewById(R.id.btsave).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ((App)getApplicationContext()).setTextData(ed.getText().toString());
                tv.setText("共享的數據是:"+ed.getText().toString());
            }
        });
    }
    public App getApp(){
        return (App) getApplicationContext();
    }
}

 

這樣就實了2個入口的程序數據共享,~~

 


免責聲明!

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



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