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"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textAppearance="?android:attr/textAppearanceLarge"android:text="Large Text"android:id="@+id/textView" /><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/editText" /><Buttonandroid: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的函數早執行 @Overridepublic void onCreate() {super.onCreate();System.out.println("App oncreate");}@Overridepublic void onTerminate() {super.onTerminate();}@Overridepublic void onLowMemory() {super.onLowMemory();}//內存清理的時候 @Overridepublic 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"><applicationandroid: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個圖標,都是程序的入口--><activityandroid: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><activityandroid: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;@Overrideprotected 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() {@Overridepublic void onClick(View view) {((App)getApplicationContext()).setTextData(ed.getText().toString());tv.setText("共享的數據是:"+ed.getText().toString());}});}public App getApp(){return (App) getApplicationContext();} }?
這樣就實了2個入口的程序數據共享,~~
?
轉載于:https://www.cnblogs.com/DonAndy/p/6208853.html
總結
以上是生活随笔為你收集整理的Android使用Application的好处的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 团队项目讨论及计划修订版
- 下一篇: 加快页面的运行速度