首先,在一个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. ThinkPhp学习07

    原文:ThinkPhp学习07 简单CRUD操作 public function show() { $m=M('User'); // $arr=$m->find(2); //查找id=2的数据, ...

  2. JVM查找类文件的顺序(转)

    配置classpath 根据path环境变量的原理,可以定义一个名为classpath环境变量,将要运行的class文件所在目录定义在该变量中. 例:set classpath=c:\ classpa ...

  3. VC调试篇

    难怪很多前辈说调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言.不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件. 我以前接触的程序大多是有比较成形的思路和方法,调试起来出 ...

  4. [ffmpeg 扩展第三方库编译系列] 关于须要用到cmake 创建 mingw32编译环境问题

    我在这里给出我编译的样例 cmake -G"MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=& ...

  5. CentOS7 下linux不能上网解决方法​,centos7 eth0 没有ip,IP突然丢失

    CentOS7 下linux不能上网解决方法​ 在CentOS VMware下安装好linux后,发现有时不能直接联网,特分享下总结出来的经验,希望对新手有用 工具/原料 XP系统 VMware.Wo ...

  6. Apache+Django+Mysql环境配置

    环境要求:Apache:2.2  Mysql:5.5 Django:1.5 python:2.7 首先下载mod_wsgi-win32-ap22py27-3.3.so 下载下来后,改名成mod_wsg ...

  7. Android中九种dialog对话框代码

    public class MainActivity extends Activity { private static final int MAX_PROGRESS = 100; private st ...

  8. JavaScript 中的事件类型5(读书笔记思维导图)

    Web 浏览器中可能发生的事件有很多类型.如前所述,不同的事件类型具有不同的信息,而“ DOM3级事件”规定了以下几类事件. UI(User Interface,用户界面)事件:当用户与页面上的元素交 ...

  9. android 在你的UI中显示Bitmap - 开发文档翻译

    由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链接链接 Displaying Bitmaps in Your UI 在你的UI中显示Bitmap ...

  10. CoreJava_Collection接口add有一个返回值!

        今天讨论与朋友小知识,我发现很多人不知道collection接口定义add方法返回的值,我们所有的工作很多年Java职工.不熟悉的公共接口,使自己成为在细节上的麻烦.一个小采访这让我想起,当我 ...