Android中Application类用法

2023-11-02

Application

Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个 Application对象,用来存储系统的一些信息。

Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(singleton)模式的一个类。

通常我们是不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,那也很简单!创建一个类继承Application并在AndroidManifest.xml文件中的application标签中进行注册(只需要给application标签增加name属性,并添加自己的 Application的名字即可)。

启动Application时,系统会创建一个PID,即进程ID,所有的Activity都会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。

Application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局的单例的,所以在不同的Activity,Service中获得的对象都是同一个对象。所以可以通过Application来进行一些,如:数据传递、数据共享和数据缓存等操作。

应用场景:

在Android中,可以通过继承Application类来实现应用程序级的全局变量,这种全局变量方法相对静态类更有保障,直到应用的所有Activity全部被destory掉之后才会被释放掉。

实现步骤:

1、继承Application

public class CustomApplication extends Application

{

    private static final String VALUE = "Harvey";

   

    private String value;

   

    @Override

    public void onCreate()

    {

        super.onCreate();

        setValue(VALUE); // 初始化全局变量

    }

   

    public void setValue(String value)

    {

        this.value = value;

    }

   

    public String getValue()

    {

        return value;

    }

}

注:继承Application类,主要重写里面的onCreate()方法(android.app.Application包的onCreate()才是真正的Android程序的入口点),就是创建的时候,初始化变量的值。然后在整个应用中的各个文件中就可以对该变量进行操作了。

2、在ApplicationManifest.xml文件中配置自定义的Application

<application

       android:name="CustomApplication">

</application>

实例代码:

CustomApplication.java

/**

 * 继承Application

 *

 * @author admin

 *

 */

public class CustomApplication extends Application

{

    private static final String VALUE = "Harvey";

   

    private String value;

   

    @Override

    public void onCreate()

    {

        super.onCreate();

        setValue(VALUE); // 初始化全局变量

    }

   

    public void setValue(String value)

    {

        this.value = value;

    }

   

    public String getValue()

    {

        return value;

    }

}

FirstActivity.java

public class FirstActivity extends Activity

{

    private CustomApplication app;

   

    @Override

    public void onCreate(Bundle savedInstanceState)

    {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

       

        app = (CustomApplication) getApplication(); // 获得CustomApplication对象

       

        Log.i("FirstActivity", "初始值=====" + app.getValue()); // 获取进程中的全局变量值,看是否是初始化值

       

        app.setValue("Harvey Ren"); // 重新设置值

       

        Log.i("FirstActivity", "修改后=====" + app.getValue()); // 再次获取进程中的全局变量值,看是否被修改

       

        Intent intent = new Intent();

        intent.setClass(this, SecondActivity.class);

        startActivity(intent);

    }

}

注:只需要调用Context的 getApplicationContext或者Activity的getApplication方法来获得一个Application对象,然后再得到相应的成员变量即可。它是代表我们的应用程序的类,使用它可以获得当前应用的主题和资源文件中的内容等,这个类更灵活的一个特性就是可以被我们继承,来添加我们自己的全局属性。

SecondActivity.java

public class SecondActivity extends Activity

{

    private CustomApplication app;

   

    @Override

    protected void onCreate(Bundle savedInstanceState)

    {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        app = (CustomApplication) getApplication(); // 获取应用程序

        Log.i("SecondActivity", "当前值=====" + app.getValue()); // 获取全局值

    }

}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest

    xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.android.test"

    android:versionCode="1"

    android:versionName="1.0">

    <uses-sdk

       android:minSdkVersion="8" />

 

    <application

       android:icon="@drawable/icon"

       android:label="@string/app_name"

       android:name="CustomApplication">

       <!-- 将我们以前一直用的默认Application设置成自定义的CustomApplication -->

       <activity

           android:name=".FirstActivity"

           android:label="@string/app_name">

           <intent-filter>

              <action

                  android:name="android.intent.action.MAIN" />

              <category

                  android:name="android.intent.category.LAUNCHER" />

           </intent-filter>

       </activity>

 

       <activity

           android:name=".SecondActivity"

           android:label="@string/app_name">

       </activity>

    </application>

</manifest>

源代码:ApplicationDemo.rar



FROM:  http://www.devdiv.com/home.php?mod=space&uid=166195&do=blog&quickforward=1&id=42912

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android中Application类用法 的相关文章

  • 发生存储异常。无法在firebase中上传图片

    在我能够更改图像并将其上传到 firebase 之前 这段代码就可以工作 但现在我突然收到此错误 我不知道问题是什么 public class SettingsActivity extends AppCompatActivity priva
  • 在phonegap中播放本地声音

    我有一个 wav文件在我的www文件夹 我正在使用 jQuery 和以下代码 警报响起 但声音不播放 难道我做错了什么
  • Whatsapp 在 Android 中共享音频文件时正在剪切音频文件

    我在共享格式不是 mp3 的音频文件时遇到问题 文件被共享 但长度较短 例如 如果文件有 10 秒 则仅共享 5 秒 如果我使用 mp3 格式 它会完全共享 但其他格式会出现问题 注意 该文件在其他应用程序 如Messenger 中共享没有
  • 服务在后台运行?

    我正在构建的应用程序的功能之一是记录功能 我通过在服务中启动 MediaRecorder 对象来实现此目的 Intent intent new Intent v getContext RecordService class Messenge
  • Android,让文本切换器成为中心?

    如何集中我的文本切换器 我尝试过设置重力 但似乎不起作用 ts setFactory new ViewFactory public View makeView TextView t new TextView this t setTypefa
  • Android Studio磁盘空间不足如何解决?

    我随机收到此错误 并且不确定为什么 Android Studio 的磁盘空间变低 Android Studio 系统目录分区磁盘空间不足 Update 此应用程序安装在运行 10 10 1 的 Mac 上 具有 251GB 内部存储和占用
  • 如何在 Android 中创建刮刮卡?

    我需要为我在学校的期末项目创建一个 刮刮卡 应用程序 但找不到如何实现刮刮事件的方法 如何创建背景图像并在其上放置灰色矩形 所以当我刮刮这些矩形时我会看到他们下面的图片 实现必须在 Android 中 因为我还不知道如何在 Objectiv
  • 如何在 android-studio 0.3.6 中运行 Gradle 1.9?

    我只是花了一些时间尝试将现有的 android studio 项目从 gradle 1 8 迁移到 gradle 1 9 Final 昨天发布 但失败了19th Nov 我在这里阅读了大多数其他与 gradle 相关的帖子 但没有一个对我有
  • 在 Android 中关闭 Spinner 中的下拉菜单

    在 Android 中打开和关闭微调器时 我需要为箭头图标设置动画 打开微调器时我可以旋转箭头 我只是放了一个setOnTouchListener on the Spinner 当下拉菜单关闭或隐藏时 问题就来了 因为我不知道如何在该操作上
  • 安卓;在 AdapterViewFlipper 上设置输入/输出动画:未知的动画师名称翻译

    我有一些非常简单的动画 可以与 ViewFlipper 完美配合 但如果我尝试在 AdapterViewFlipper 输入 输出上设置它们 我会收到运行时错误 未知的动画师名称翻译 查看每个方法的相应方法 看起来 ViewFlipper
  • 来自外部 XML 的 Android 本地化

    是否可以使用从服务接收到的 XML 在运行时翻译 Android 应用程序 如果可能的话 请有人指出我正确的方向 谢谢 Warning 我读到的所有内容都表明 让您的应用程序更改语言不是一个好主意 因为 Android 框架不支持它 并且可
  • Android 依赖项:apklib 与 aar 文件

    据我了解 apklib包含代码 共享资源Maven aar文件由以下人员分发Gradle The aar与 apklib 的主要区别在于 类被编译并包含在 aar 根目录下的classes jar 中 然而apklib不能包含已编译的类文件
  • 使用startActivityForResult,如何获取子活动中的requestCode?

    我有四项活动 即 A B C 和 D 我的情况是A将通过startActivityForResult启动活动B startActivityForResult new Intent this B class ONE 在另一种情况下 我将使用不
  • 如何在Android中隐藏应用程序标题? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想隐藏应用程序标题栏 您可以通过编程来完成 import android app Activity import android os
  • Android apk 调试模式工作正常,但发布模式给出太多警告

    我正在尝试从 eclipse 获取签名的 APK 我有一个可调试的 apk 版本 运行良好 现在发布时 当我尝试使用 Eclipse ADT 进行编译和签名时 我收到很多警告 其中大部分是can t find superclass or i
  • 找不到资源矢量绘图的异常

    我将在某些设备上运行我的应用程序 其崩溃日志如下 01 04 16 54 02 206 7466 7466 com lawnmowers E AndroidRuntime FATAL EXCEPTION main Process com l
  • 协程和 Firebase:如何实现类似 Javascript 的 Promise.all()

    在 Javascript 中 您可以同时启动两个 或更多 异步任务 等待它们完成 然后执行某些操作 继续 const firstReturn secondReturn await Promise all firstPromise secon
  • 如何手动添加Android Studio依赖

    我多次尝试向我的项目添加依赖项 但每次都会出现错误 我想添加它们的依赖项是 de hdodenhof circleimageview 1 3 0 and com github bumptech glide glide 3 6 1 所以我想下
  • RecyclerView元素更新+异步网络调用

    我有一个按预期工作的回收视图 我的布局中有一个按钮可以填充列表 该按钮应该进行异步调用 根据结果 我更改按钮的外观 这一切都发生得很好 但是 当我单击按钮并快速向下滚动列表时 异步调用的结果会更新新视图的按钮 代替旧视图的视图 我该如何处理
  • Android:列“_id”不存在

    我收到这个错误 IllegalArgumentException 列 id 不存在 当使用SimpleCursorAdapter从我的数据库中检索 该表确实有这个 id柱子 注意到这是一个常见问题 我尝试根据网上的一些解决方案来解决它 但它

随机推荐

  • 金融经济学研究什么?

    文章目录 什么是金融 资产和资产的回报率 资产定价 金融摩擦与金融契约理论 有效市场之争与行为金融 什么是金融 金融就是资金融通 由维基百科所定义的 金融是处理资产和负债 在 时间和确定及不确定状态下分配的领域 如何理解呢 主要从这么几点入
  • pom.xml的scope/classifier等容易忽略标签

    文章目录 一 scope标签的值 二 pom xml案例 三 scope不同值参与阶段 四 Maven的打包三种插件 五 classifier使用 1 classifier概述 2 使用场景 六 optional标签使用 一 scope标签
  • 微信小程序——生命周期

    在微信小程序中 可以通过生命周期函数来执行相应的代码操作 以下是一些常见的生命周期代码操作示例 在 onLoad 生命周期中进行数据初始化和网络请求 onLoad function options 数据初始化 this setData na
  • 3-Numpy数组操作2(索引和切片)

    索引和切片 一维 a1 np arange 0 20 print a1 print a1 1 gt gt gt 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 1 多维 a2 np ara
  • 目标检测中的Label Assignment

    PaperWeekly 原创 作者 燕皖 单位 渊亭科技 研究方向 计算机视觉 CNN Label Assignment Label assignment 主要是指检测算法在训练阶段 如何给特征图上的每个位置进行合适的学习目标的表示 以及如
  • idea常用插件和注释

    背景 随着idea越来越受开发者捧月 相信很多人 无论在换公司或者配置新得电脑 都会重新配置各种各样得插件 比如 lombok mybatis系列 maven等 但人得记忆都有限得 每天都在行走 从未没有停下 借用法师一句话 人生那么长 停
  • 无序链表的归并排序 - Java代码纯享版

    public class ListNodeMergeSort public static class ListNode int val ListNode next public ListNode int val this val val p
  • 嵌入式linux内存分析

    在linux的桌面发行版中 一般都会有一个swap分区 然而在用FLASH做存储介质的嵌入式设备中 是没有交换分区的 这主要的有如下原因 1 一旦使用了交换分区 系统的性能将下降得很快 不可接受 2 FLASH的写次数有限的 大概在几十万次
  • win10 安装 mysql server

    welcome to my blog 如何启动mysql server 只需四步 安装 配置mysql server 第一步 去官网下载mysql server 下载地址 有两个下载链接 第一个安装包比较小 第二个安装包比较大 因为包含调试
  • CCP集成和基于CANoe的简易标定实现

    CCP简介 CCP就是基于CAN总线的标定协议 在没有这个协议之前 每个供应商有自己的标定工具和协议 五花八门 很难协调 终于有一天有个哥们跳出来制定了一个规范 说大家伙都按这个方法来搞标定测试吧 这个哥们就是ASAP CCP协议属于其中的
  • 最大类间方差(大津法)

    1 概述 最大类间方差法是由日本学者大津 Nobuyuki Otsu 于1979年提出的 是一种自适应的阈值确定的方法 又叫大津法 简称OTSU 它是按图像的灰度特性 将图像分成背景和目标2部分 背景和目标之间的类间方差越大 说明构成图像的
  • 好玩的脚本代码大全_Scriptable脚本——网易云热评

    Scriptable脚本 网易云热评 今天我为大家带来新的作品 iOS14桌面组件神器 Scriptable 原创脚本 精美作品分享 喜欢的话就点关注吧 更多脚本正在路上 效果图 如何使用 iPhone 上下载 Scriptable App
  • Tree with Maximum Cost---CF1092F 树上DP

    F Tree with Maximum Cost time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstand
  • LoRa学习总结(三)

    之前总结是LoRa的基本知识 接下来是都是代码的结构或者细节方面的总结 1 协议介绍 协议将分成三层 射频层 MRFI 网络层 NWK 应用层 APP 2 射频层 这里没有通常所说的物理层和数据链路层 因为这是有Radio芯片将传输过来的数
  • 第3期大模型前沿讲习班报名中,顶尖专家面授,多角度系统培训

    人工智能研究与应用范式正经历一场剧变 越来越多的顶级团队和杰出人才纷纷加入这一变革浪潮 作为AI大模型科研先锋 智源研究院携手一批卓越的学者与工程师 致力于将尖端技术与经验传授给有潜力的学习者 通过高效的学习方式 让更多人能迅速融入这一重要
  • 基于JAVA新型农村消费贷电商平台计算机毕业设计源码+系统+数据库+lw文档+部署

    基于JAVA新型农村消费贷电商平台计算机毕业设计源码 系统 数据库 lw文档 部署 基于JAVA新型农村消费贷电商平台计算机毕业设计源码 系统 数据库 lw文档 部署 本源码技术栈 项目架构 B S架构 开发语言 Java语言 开发软件 i
  • C++ 小记 :使用 string 定义变量要先初始化

    使用 string 时先给其初始化 否则可能出现未知错误 初始化时 如下是错误示例 std string str NULL 如下是正确示例 std string str
  • doxygen简明使用教程

    1 工作环境 ubuntu18 04 2 安装二进制 sudo apt get install doxygen doxygen doc doxygen gui graphviz 一次性二进制全安装上 发现竟然已经安装过了 3 调用该命令雕出
  • AIGC图像生成的原理综述与落地畅想

    AIGC 这个当前的现象级词语 本文尝试从文生图的发展 对其当前主流的 Stable Diffusion 做一个综述 以下为实验按要求生成的不同场景 风格控制下的生成作品 概述 技术演进一 昙花初现 GAN 家族 GAN 系列算法开启了图片
  • Android中Application类用法

    Application类 Application和Activity Service一样是Android框架的一个系统组件 当Android程序启动时系统会创建一个 Application对象 用来存储系统的一些信息 Android系统自动会