• 【Android进阶】在开发中Application到底用来做什么


    首先,在一个Android程序中,有且只有一个Application对象,在程序开始跑起来的时候,首先执行Application的onCreate方法,这是一个Android应用的入口,在开发中,我们常常自定义一个MyApplication用来执行某些操作。由于在一个程序中,有且只有一个Application对象,所以我们可以使用单例设计模式,(这句话是错误的!因为单例模式需要把构造函数私有,但是Application的构造函数是不能私有的,所以不能使用单例模式,其实也没有必要这样做)下面简单的介绍一下自定义Application的使用。


    /**
     * 自定义Application对象
     * @Package 	com.example.myallutils
     *  
     * TODO
     * @author 		ZhaoKaiQiang
     *
     * @time   		2014年5月6日
     */
    public class MyApplication extends Application {
    	
    	//这是Android程序的入口
    	@Override
    	public void onCreate() {
    		super.onCreate();
    	}
    	
    }

    自定义完Application对象就可以了吗?当然不是,还需要在AndroidManifest.xml中进行配置

     <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:name="com.example.myallutils.MyApplication"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Light.NoTitleBar" >
            <activity android:name="com.example.myallutils.MainActivity" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>

    这样就可以使用我们自己的Application了。

    那么自定义了MyApplication到底有什么用呢?

    目前我接触到的使用到Application的工作场景主要有两个。

    1.数据共享

    在Activity中我们可以使用getApplication获取到我们的Application对象,这样我们就可以使用Application对象在不同的Activity之间进行数据的传输。

    比如在软件刚登陆的时候,我需要获取之前用户登录的账号信息,这些信息保存在了sharedpreferences中,那么我们就可以在MyApplication的onCreate方法中对这些数据进行初始化,保存在一个变量中,这样当我们在其他的页面需要用到这些用户信息的时候,我们就可以直接从MyApplication中获取这些信息。

    2.关闭所有的Activity

    彻底的关闭应用程序,网上有人提供了不少的思路,比如杀死当前进程等等,而使用Application对Activity进行管理也是一个不错的办法。

    比如下面的代码可以写在我们的MyApplication中


    //存放Activity对象
    	private List<Activity> activityList = new LinkedList<Activity>();
    
    	// 添加Activity到容器中
    	public void addActivity(Activity activity) {
    		activityList.add(activity);
    	}
    
    	// 遍历所有Activity并finish
    	public void exit() {
    		for (Activity activity : activityList) {
    			activity.finish();
    		}
    	}

    当我们新进入一个Activity的时候,在Activity的onCreate方法中调用addActivity(this);然后在程序的出口的地方,调用exit()方法,就可以关闭所有的Activity。

    但是我对这个方案的时候一直有一个疑惑,就是如果我们创建的所有的Activity都在一个进程中的话,那么只要我们控制好流程,保证每个页面在关闭的时候都调用finish(),应该不会有Activity存活才对,也就不用费尽心思想着怎么彻底的推出程序,但是如果新打开的Activity是在新的栈里面(设置启动的模式),这样或许就有必要这样做了,所以如果有人可以帮我解答这个疑问,不胜感激!


  • 相关阅读:
    实用的网站记录
    XML记一次带命名空间的xml读取
    WEB项目挂载到IIS session过期
    【EF】CodeFirst Fluent API使用记录
    【Unity】微软的一款依赖注入组件
    【AutoFac】依赖注入和控制反转的使用
    【JavaScript】封装实用方法【持续积累】
    【Config】类库读取自己的配置文件,配置文件的扩展
    【c#】队列(Queue)和MSMQ(消息队列)的基础使用
    0、Java配置----JDK开发环境搭建及环境变量配置
  • 原文地址:https://www.cnblogs.com/oversea201405/p/3749546.html
Copyright © 2020-2023  润新知