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个入口的程序数据共享,~~

时间: 2024-08-25 03:25:22

Android使用Application的好处的相关文章

android自定义Application全局变量不能类型转换的问题

今天弄了个全局变量AppContext ,但一直出现如下错误,原来继承 Application的得在清单文件声明. java.lang.RuntimeException: Unable to start activity ComponentInfo{com.langteng.shiliao/com.langteng.shiliao.activity.MainActivity}: java.lang.ClassCastException: android.app.Application canno

Android使用Application总结

Application 配置全局Context 第一步.写一个全局的单例模式的MyApplication继承自Application 覆盖onCreate ,在这个方法里面实例化Application 第二步.配置全局的Context <application android:name="com.appstore.service.MyApplication" ></application> 第三步.使用,使用的时候用的时候根据类的名称访问Context Andr

Android中Application类用法

原文:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系统的一些信息. Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(si

Android 通过Application 传递数据

</pre><pre> package com.example.ApplicationTest; import android.app.Application; /** * Created by chang on 14-10-1. */ public class App extends Application { public String getName() { return name; } public void setName(String name) { this.name

Android Studio: Application Installation Failed

[Android Studio: Application Installation Failed] 参考:http://stackoverflow.com/questions/32718044/android-studio-application-installation-failed

java.lang.ClassCastException: android.app.Application cannot be cast to

出这个异常的原因是在项目中添加了新lication类(public class Application extends lication)之后,没有在AndroidManifest.xml中添加该类的声明,所以编译器抛出异常: java.lang.ClassCastException: android.app.Application cannot be cast to 类名  <application android:icon="@drawable/icon" android:l

android开发 - Application类

本文摘自google的android官网翻译,如果有不对的地方,请各位大神指点 网址:http://developer.android.com/reference/android/app/Application.html Application,Activity,Service,content provider都是Android框架的系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系统的一些信息. 启动一个android应用程序,就等于启动了一个进程,一个进

Android 当中 application的使用

转至:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系统的一些信息. Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(si

android &amp;lt;application&amp;gt; 开发文档翻译

由于本人英文能力实在有限,不足之初敬请谅解 本博客仅仅要没有注明"转",那么均为原创.转贴请注明本博客链接链接 <application>语法:    <application android:allowTaskReparenting=["true" | "false"]                 android:allowBackup=["true" | "false"]