当前位置: 代码迷 >> Android >> 【Android进阶】在开发中Application终究用来做什么
  详细解决方案

【Android进阶】在开发中Application终究用来做什么

热度:25   发布时间:2016-04-28 05:49:11.0
【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是在新的栈里面(设置启动的模式),这样或许就有必要这样做了,所以如果有人可以帮我解答这个疑问,不胜感激!


  相关解决方案