首先,在一个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. Nginx之http_image_filter_module模块使用

    一.安装 #yum install gd-devel # #./configure --prefix=/usr/local/nginx \ # --with-debug \ # --with-http ...

  2. 一个好用的Dialog插件

    网页中常常须要弹出dialog,尽管非常多JS开源框架都提供这个功能,可是效果都不是非常好,比方easy-UI.改动样式这些又不是我擅长的,身边又没有美工兄弟,苦逼啊! (Easy-UI的BasicD ...

  3. RegisterHotKey注册热键,然后响应WM_HOTKEY消息

    MSDN中的一个示例代码,步骤就是RegisterHotKey注册热键,然后响应WM_HOTKEY消息 @1:这个是系统热键 #include "stdafx.h" int _cd ...

  4. jquery实现菜单功能(单击展开或者关闭)-一般应用于后台

    <!doctype html> <html> <head> <meta charset="gb2312"> <title> ...

  5. 不要打开文件,阅读Rvt信息档案

    叶老师,想问一下是否能基于revit API 2014,直接在开发时传递给程序要处理的文件名称和路径.而不用再在revit软件中打开为当前活动视图,就直接获得文件里信息.这样可行不? 答: 能够.你能 ...

  6. Android开发四大组件概述

    这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity具体解释 二.Service具体解释 三.Broadcast Receiver具体解释 四.Content Provid ...

  7. Ubuntu14.04搭建android开发环境

    一 下载ADT 官方下载地址:http://developer.android.com/sdk/index.html(须要FQ或者改动host) 二 解压 1 使用终端将下载的文件解压当前文件夹下: ...

  8. 灰度共生矩阵(GLCM) 及matlab代码实现

    原地址:http://blog.csdn.net/bookwormno1/article/details/7962466 这几天学习灰度共生矩阵,现记录如下: 讲灰度共生矩阵比较好的一份百度文库文档: ...

  9. [开源]C#二维码生成解析工具,可添加自定义Logo (转)

    二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字 ...

  10. 2014-5-22 java.lang.OutOfMemoryError: Java heap space的一次诊断

    收到消息某系统一个节点因为内存溢出而宕机.系统的中间件是weblogic.数据库的oracle. 1. 先用IBM  HeapAnalyzer分析内存溢出时的dump文件,找到占用内存最多的请求,然后 ...