赞
踩
Application 是 Android的一大组件,在App运行过程中有且仅有一个Application对象贯穿整个生命周期 。
一、生命周期
- package com.qidian.chapter07;
-
- import android.app.Application;
- import android.content.res.Configuration;
- import android.util.Log;
-
- import androidx.annotation.NonNull;
-
- public class MyApplication extends Application {
- private static String TAG = "guo";
-
- // 在App启动时调用
- @Override
- public void onCreate() {
- super.onCreate();
- Log.d(TAG, "onCreate: ");
- }
-
- // 在App终止时调用
- @Override
- public void onTerminate() {
- super.onTerminate();
- Log.d(TAG, "onTerminate: ");
- }
-
- // 在配置改变时调用(横竖屏切换,kill应用)
- @Override
- public void onConfigurationChanged(@NonNull Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- Log.d(TAG, "onConfigurationChanged: ");
- }
- }

二、利用Application操作全局变量
全局的意思的其他代码都可以引用该变量,因此全局变量是共享数据和消息传递的好帮手。
适合在Application中保存的全局变量主要有下面3类数据:
- 会频繁读取的信息,如用户名、手机号
- 不方便由Intent传递的数据,例如位图对象、非字符串类型的集合对象
- 容易因频繁分配内存导致内存泄露的对象,如Handler对象等。
package com.qidian.chapter07; 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 String TAG = "guo"; private static MyApplication myApp; // 声明一个公共的信息映射对象,可当全局变量使用(需要注意的是kill掉应用进程结束,MyApplication生命周期结束,所存储的数据也随之消失) public HashMap<String, String> infoMap = new HashMap<>(); public static MyApplication getInstance() { return myApp; } // 在App启动时调用(应用只会执行一次) @Override public void onCreate() { super.onCreate(); myApp = this; Log.d(TAG, "onCreate: "); } // 在App终止时调用 @Override public void onTerminate() { super.onTerminate(); Log.d(TAG, "onTerminate: "); } // 在配置改变时调用(横竖屏切换,kill应用) @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.d(TAG, "onConfigurationChanged: "); } }
package com.qidian.chapter07; import android.os.Bundle; import android.view.View; import android.widget.CheckBox; import android.widget.EditText; import androidx.appcompat.app.AppCompatActivity; public class AppWriteActivity extends AppCompatActivity implements View.OnClickListener { private CheckBox ck_married; private EditText et_name; private EditText et_age; private EditText et_height; private EditText et_weight; private MyApplication app = MyApplication.getInstance(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_app_write); ck_married = findViewById(R.id.ck_married); et_name = findViewById(R.id.et_name); et_age = findViewById(R.id.et_age); et_height = findViewById(R.id.et_height); et_weight = findViewById(R.id.et_weight); findViewById(R.id.btn_save).setOnClickListener(this); reload(); } private void reload() { if (app.infoMap.get("name") == null) { return; } String name = app.infoMap.get("name"); String age = app.infoMap.get("age"); String height = app.infoMap.get("height"); String weight = app.infoMap.get("weight"); String married = app.infoMap.get("married"); et_name.setText(name); et_age.setText(age); et_height.setText(height); et_weight.setText(weight); } @Override public void onClick(View v) { String name = et_name.getText().toString(); String age = et_age.getText().toString(); String height = et_height.getText().toString(); String weight = et_weight.getText().toString(); app.infoMap.put("name",name); app.infoMap.put("age",age); app.infoMap.put("height",height); app.infoMap.put("weight",weight); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。