android Application简单使用及手动释放内存
一、
1、 Application是Android框架的一个系统组件,当Android程序启动时系统会创建一个 Application对象,用来存储系统的一些信息,通常我们是不需要指定一个Application的,系统会自动帮我们创建;
2、Application 对同一个应用程序是唯一的,所以可以使用Application进行数据共享,多个组件之间数据共享,如:两个Activity之间数据共享等;
3.Application对象由Android系统管理,其回调函数都运行于UI线程即主线程,
回调函数有onCreate,onConfigurationChanged即系统配置变更,onTrimMemory、 onLowMemory释放内存等;
二、
1、首先我来定义创建一个base类继承于Application;
2、代码里增加了关于退出app时activity销毁及内存释放;
3、对Application原有的方法进行了说明,这里就不在多写了,可直接参考代码;
public class BaseApplication extends Application {
private static ArrayList<Activity> activities = new ArrayList<Activity>();
private String name;
private static BaseApplication BaseAppLication;
public static BaseApplication getBaseApplication() {
return BaseAppLication;
}
/*
*在应用程序创建的时候被调用,可以实现这个这个方法来创建和实例化任何应用程序状态变量或共享资源
*/
@Override
public void onCreate() {
super.onCreate();
this.BaseAppLication = this;
//创建全局变量,在不同的activity可直接引用即可;
String appName = getApplicationContext().getResources().getString(R.string.app_name);
//返回当前进程的名称
String processName = getProcessName();
}
/*
* 当操作系统确定是进程从其进程中删除不需要的内存的好时机时调用;
* 例如,当它进入后台并且没有足够的内存来保持尽可能多的后台进程运行时,就会发生这种情况;
* 通常比较该值是否大于或等于
*/
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
switch (level) {
case TRIM_MEMORY_UI_HIDDEN:
break;
}
}
/*
*当组件运行时,设备配置发生变化时由系统调用,如:屏幕旋转,通过重新检索资源
*/
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
/*
*当整个系统内存不足时调用此方法,也可采用手动方式重写此方法来清空缓存或者释放不必要的资源
*/
@Override
public void onLowMemory() {
super.onLowMemory();
}
/*
* 应用程序结束时调用,
*/
@Override
public void onTerminate() {
super.onTerminate();
}
/*
* 关闭Application finish activity 并释放内存;
*/
public static void exitApp() {
for (Activity acti : activities) {
acti.finish();
}
System.exit(0);
}
/*
*添加相应的activity
*/
public static void addActivity(Activity acti) {
activities.add(acti);
}
/*
*finish相应的activity
*/
public static void removeActivity(Activity acti) {
int index = -1;
if ((index = activities.indexOf(acti)) != -1) {
activities.remove(index).finish();
}
}
}
protected void setName(String name) {
this.name = name;
}
protected String getName() {
return name;
}
3.接下来我们来看AndroidManifest.xml定义:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.application.createapp">
<!--直接在通过name 引用BaseApplication-->
<application
android:name=".BaseApplication"
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/AppTheme">
<activity android:name=".MainActivity"
android:windowSoftInputMode="stateVisible|adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<activity
android:name=".Main2Activity"
android:label="@string/title_activity_main2"
android:icon="@mipmap/ic_launcher_round"
>
</activity>
</manifest>
4.MainActivity.java代码使用,这里简单用textView及Button做了一个挑战及TextView显示;
public class MainActivity extends Activity {
private Button bt1;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//初始化BaseApplication并获取实例对象
BaseApplication baseApplication = BaseApplication.getBaseApplication();
//添加activity
BaseApplication.addActivity(this);
setContentView(R.layout.activity_main);
bt1 = (Button) findViewById(R.id.bt1);
tv = (TextView) findViewById(R.id.tv1);
//获取name并进行显示;
tv.setText(baseApplication.getName());
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//跳转Main2Activity;
Intent intent = new Intent();
intent.setClass(getApplicationContext(), Main2Activity.class);
startActivity(intent);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
//两种方式进行销毁acitvity和手动释放;
BaseApplication.exitApp();
// BaseApplication.removeActivity(this);
}
}
5.我们在来看Main2Activity,其和MainActivity写法相同;
public class Main2Activity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//添加activity
BaseApplication.addActivity(this);
setContentView(R.layout.activity_main2);
tv=(TextView)findViewById(R.id.tv2);
//显示name
tv.setText(BaseApplication.getBaseApplication().getName());
}
@Override
protected void onDestroy() {
super.onDestroy();
//返回时销毁activity
BaseApplication.removeActivity(this);
}
}
以上可灵活运用,希望对需要的小伙伴有所帮助;