news 2026/6/10 15:30:18

安卓基础之《(14)—数据存储(4)应用组件Application》

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
安卓基础之《(14)—数据存储(4)应用组件Application》

一、Application的生命周期

1、如果有这样的需求
资源不需要持久化,放到内存里就可以了
希望多个组件都可以访问这个数据
希望它是个可以操作的全局变量

可以使用Application这个组件

2、Application是Android的一大组件,在App运行过程中有且仅有一个Application对象贯穿整个生命周期

3、Application组件方法说明
(1)onCreate:在App启动时调用,可以在这里做准备工作
(2)onTerminate:(只在模拟环境上有效)在App终止时调用,可以在这里做善后的工作
这个接口是给Android系统开发工程师用的,不是Android应用开发工程师用
(3)onConfigurationChanged:在配置改变的时候调用,例如从竖屏变为横屏
屏幕旋转,Activity会重新创建,此时页面上表单填的内容都会消失。可以用ViewModel来解决

4、例子
MyApplication.java

package com.example.chapter06; import android.app.Application; import android.content.res.Configuration; import android.util.Log; import androidx.annotation.NonNull; public class MyApplication extends Application { // 在App启动时调用 @Override public void onCreate() { super.onCreate(); Log.d("sam", "MyApplication onCreate"); } // 在App终止时调用 @Override public void onTerminate() { super.onTerminate(); Log.d("sam", "MyApplication onTerminate"); } // 在配置改变的时候调用,例如从竖屏变为横屏 @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.d("sam", "MyApplication onConfigurationChanged"); } }

MainActivity.java

package com.example.chapter06; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("sam", "MainActivity onCreate"); } }

AndroidManifest.xml清单文件application标签下添加android:name=".MyApplication"

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <application android:name=".MyApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.MyApplication"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

5、日志

竖屏变成横屏

二、利用Application操作全局变量

1、Application的数据可以让Activity共享

2、Application在整个应用中只有一个实例,所以在我们自定义的时候,需要使用单例模式来写构造方法
改造MyApplication.java

package com.example.chapter06; import android.app.Application; import android.content.res.Configuration; import android.util.Log; import androidx.annotation.NonNull; import java.util.HashMap; public class MyApplication extends Application { private static MyApplication mApp; // 声明一个公共的信息映射对象,可当做全局变量使用 public HashMap<String, String> infoMap = new HashMap<>(); public static MyApplication getInstance() { return mApp; } // 在App启动时调用 @Override public void onCreate() { super.onCreate(); mApp = this; // 在onCreate初始化实例 Log.d("sam", "MyApplication onCreate"); } // 在App终止时调用 @Override public void onTerminate() { super.onTerminate(); Log.d("sam", "MyApplication onTerminate"); } // 在配置改变的时候调用,例如从竖屏变为横屏 @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.d("sam", "MyApplication onConfigurationChanged"); } }

使用:

MyApplication mApp = MyApplication.getInstance(); mApp.infoMap.put("name", name); mApp.infoMap.put("age", age);

3、适合在Application中保存的全局变量主要有下面3类数据
(1)会频繁读取的信息,如用户名、手机号等
(2)不方便由Intent传递的数据,例如:位图对象、非字符串类型的集合对象等
(3)容易因频繁分配内存而导致内存泄漏的对象,如Handler对象等

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 9:28:47

安全测试在云原生环境的挑战:演进、痛点与破局之道

云原生重塑安全边界云原生技术&#xff08;容器化、微服务、服务网格、不可变基础设施、声明式API&#xff09;的广泛应用&#xff0c;彻底颠覆了传统单体应用的架构模式与部署范式。这种变革在提升敏捷性、弹性与资源利用率的同时&#xff0c;将安全测试推入了前所未有的复杂战…

作者头像 李华
网站建设 2026/6/10 9:24:18

BC911:22V/3.5A 同步降压单节锂电池充电芯片

BC911是一款高集成度同步降压锂电池充电芯片&#xff0c;专为单节锂离子电池设计&#xff0c;输入电压范围4~22V&#xff0c;最大充电电流3.5A&#xff0c;适用于便携式媒体播放器、智能手机、PDA/DSC、手持设备及充电底座等场景。提供ESOP8与DFN10两种封装&#xff0c;工作结温…

作者头像 李华
网站建设 2026/6/10 7:57:15

智能合约“可塑”之争:代理模式与钻石标准,谁将主导链上未来?

引言&#xff1a;智能合约的“硬分叉困境”与破局之道 当DeFi协议因代码漏洞遭受攻击时&#xff0c;当NFT项目因功能迭代需求被迫迁移用户资产时&#xff0c;当DAO组织因治理规则升级引发社区分裂时——智能合约的“不可修改性”&#xff0c;这一曾被视为区块链核心优势的特性…

作者头像 李华
网站建设 2026/6/10 7:51:18

京东蚂蚁领跑链上金融:香港RWA革命如何打通万亿级资产新通道?

引言&#xff1a;一场静默的金融革命正在东方之珠上演当华尔街的投行精英还在为传统证券代币化的合规框架争论不休时&#xff0c;香港维多利亚港的夜色中&#xff0c;一场以“现实资产代币化”&#xff08;RWA&#xff09;为核心的链上金融竞赛已悄然进入白热化阶段。京东科技在…

作者头像 李华
网站建设 2026/6/10 7:55:59

DApp开发全周期革命:模式创新、模块化架构与合规化生存指南

引言&#xff1a;DApp&#xff0c;数字世界的“新宪法”截至2025年12月&#xff0c;全球DApp数量突破12万&#xff0c;覆盖金融、游戏、社交、供应链等30余个领域&#xff0c;用户总量突破5亿。从Curve Finance的800亿美元锁仓量到Axie Infinity单日300万活跃用户&#xff0c;D…

作者头像 李华