首先,在一个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是在新的栈里面(设置启动的模式),这样或许就有必要这样做了,所以如果有人可以帮我解答这个疑问,不胜感激!

【Android进阶】在开发中Application到底用来做什么的更多相关文章

  1. 【Android】安卓开发中的布局与事件

    [Android]安卓开发中的布局与事件 1.Android Studio下载配置 非常简单的百度然后点击下载安装就好了.注意的是,本来我是打算使用评价还不错的Genymotion这个软件来充当虚拟机 ...

  2. 【Android归纳】开发中应该注意的事项

    1.子线程中不能更新界面,更新界面必须在主线程中进行 2.Fragment注意的事项: a)  Activity调用Fragment中的方法 b)  Thread或者Handler调用Fragment ...

  3. Android移动应用开发中常见的经验技巧总结

    转:http://wwwdevstorecn/essay/essayInfo/6128.html 1. 对话保持的解决方案. 要求: 1.app中使用webview访问具体网站的内容,但是app与服务 ...

  4. Android应用程序开发中碰到的错误和获得的小经验

    1,Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE Description:这表示手机内存不足,对内存较小的手机经常会出现这样的问题,从 ...

  5. android -------- 解决NDK开发中的 Method 'NewStringUTF' could not be resolved

    创建NDK项目时, .cpp文件中出现错误, Method 'NewStringUTF' could not be resolved 如图: 网上看了很多解决方式 项目右键->属性->c/ ...

  6. JavaWEB开发中的/到底代表什么

  7. Builder模式详解及其在Android开发中的应用

    一.引言 在Android开发中,采用Builder模式的代码随处可见,比如说Android系统对话框AlertDialog的使用或者是Android中的通知栏(Notification)的使用,又比 ...

  8. Android内存优化大全(中)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...

  9. Android开发面试经——4.常见Android进阶笔试题(更新中...)

      Android开发(29)  版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http:/ ...

随机推荐

  1. Activity组件的生命周期

    一.Activiy组件的三个状态: 1.前台状态(active) : 在屏幕的最上层,页面获得焦点,可以响应用户的操作2.可视状态(paused) : 不能与用户交互,但是还存在于可视区域内,它依然存 ...

  2. li里的a标签浮动了,为什么li本身也浮动了?

    <ul> <li><a href="#"></a></li> <li><a href="#& ...

  3. 14.4.8 Configuring the InnoDB Master Thread IO Rate 配置InnoDB Master Thread I/O Rate

    14.4.8 Configuring the InnoDB Master Thread IO Rate 配置InnoDB Master Thread I/O Rate 主的master thread ...

  4. Delphi 中 FindWindow 和 FindWindowEx 找到外部进程,然后发送消息(比如最大化)

    FindWindow(lpClassName,        {窗口的类名}lpWindowName: PChar {窗口的标题}): HWND;              {返回窗口的句柄; 失败返 ...

  5. OCP读书笔记(7) - 使用RMAN执行恢复

    7.Using RMAN to Perform Recovery 使用RMAN进行完全恢复system表空间文件丢失的恢复 模拟损坏: SQL> conn /as sysdba; SQL> ...

  6. Installing SSL on CentOS | My Virtual Time Capsule

    Installing SSL on CentOS | My Virtual Time Capsule Installing SSL on CentOS Extracted from the Sourc ...

  7. SSH WebShell: SSH在线WEB管理器安装教程 - VPS管理百科

    SSH WebShell: SSH在线WEB管理器安装教程 - VPS管理百科 SSH WebShell: SSH在线WEB管理器安装教程 本站原创 [基于 署名-非商业使用-相同方式分享 2.5 协 ...

  8. LeetCode_Merge Two Sorted Lists

    一.题目 Merge Two Sorted Lists My Submissions Merge two sorted linked lists and return it as a new list ...

  9. exit()和_exit()和return

    exit()和return的差别: 依照ANSI C,在最初调用的main()中使用return和exit()的效果同样. 但要注意这里所说的是"最初调用".假设main()在一个 ...

  10. Unity3D游戏开发从零单排(四) - 制作一个iOS游戏

    提要 此篇是一个国外教程的翻译,尽管有点老,可是适合新手入门. 自己去写代码.debug,布置场景,能够收获到非常多.游戏邦上已经有前面两部分的译文,这里翻译的是游戏的最后一个部分. 欢迎回来 在第一 ...