android 退出APP

android 退出APP在onCreate()中将Activity实例放到线性容器中,,,,退出时,一顿((Activity)list.gert(i)).finsh();存在的问题也是很明显的。。。保存了Activity的引用,是否会涉及,内存回收的问题。。。。(你得直到下面用的是强引用的方式哦。)packagecom.mystore.customer.act

大家好,又见面了,我是你们的朋友全栈君。

在onCreate() 中将Activity 实例 放到 线性容器中,,,, 退出时,一顿 ((Activity)list.gert(i)).finsh();

存在的问题也是很明显的。。。

保存了Activity的引用,是否会涉及,内存回收的问题。。。。(你得直到下面用的 是 强引用 的方式 哦。)

package com.mystore.customer.activity;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.lang.Thread.UncaughtExceptionHandler;
import java.util.LinkedList;
import java.util.List;

import mylog.Log;
import android.app.Activity;
import android.app.Application;
import android.content.pm.PackageManager.NameNotFoundException;

import com.mystore.customer.activity.lookfor.LookForCustomerActivity;
import com.mystore.customer.activity.more.MoreMessageActivity;
import com.mystore.customer.activity.ramble.HotStoreActivity;
import com.mystore.customer.activity.search.SearchMainActivity;

public class CustomerApplication extends Application {
	
	private static final String TAG = "CustomerApplication";
	
	private static Application application;
	
	public static String VERSION = "1.1";

	public static Long EXIT_TIMEOUT = 2500l;
	
	//add activity container,used to exit app 
	private List<Activity> activityList = new LinkedList<Activity>();
	
	private static CustomerApplication instance;
	
	// 单例模式中获取唯一的ExitApplication 实例
	public static CustomerApplication getInstance() {
		if (null == instance) {
			instance = new CustomerApplication();
		}
		return instance;

	}
	 
	// 添加Activity 到容器中
	public void addActivity(Activity activity) {
		 activityList.add(activity); 
	}
	  
	// 遍历所有Activity 并finish

	public void exit() {
		for (Activity activity : activityList) {
			activity.finish();
		}

		System.exit(0);
	}
	
	public void popToMainTab(){
		
		for (int i=activityList.size()-1;i>0;i--) {
			Activity activity = activityList.get(i);
			
			if(activity!=null){
				if(
						  (HotStoreActivity.class).equals(activity.getClass())
						  || (MainActivity.class).equals(activity.getClass())
						  || (SearchMainActivity.class).equals(activity.getClass())
						  || (MoreMessageActivity.class).equals(activity.getClass())
						  || (LookForCustomerActivity.class).equals(activity.getClass())
						
				){
					//跳出循环
					break;
				}else{
					activity.finish();
				}
			}
		}
	}
	 

	@Override
	public void onCreate() {
		super.onCreate();

		Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
			public void uncaughtException(Thread thread, Throwable throwable) {
				final Writer result = new StringWriter();
				final PrintWriter printWriter = new PrintWriter(result);
				throwable.printStackTrace(printWriter);
				String strStacktrace = result.toString();
				printWriter.close();

				Log.e("", "================================");
				Log.e("", "Force close occur, thread is: " + thread
						+ " throwable: " + throwable);
				Log.e("", " stacktrace " + strStacktrace);
				Log.e("", "================================");
			}
		});
		
		application = this;
		try {
			VERSION = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
		} catch (NameNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public static Application getApplication() {
		return application;
	}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160724.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Mybatis异常总结

    Mybatis异常总结

    2021年6月9日
    102
  • 悖论软件测试农药

    悖论软件测试农药

    2022年1月7日
    70
  • ConcurrentHashMap源码分析(JDK8版本)

    ConcurrentHashMap源码分析(JDK8版本)注:本文源码是JDK8的版本,与之前的版本有较大差异ConcurrentHashMap是conccurrent家族中的一个类,由于它可以高效地支持并发操作,以及被广泛使用,经典的开源框架Spring的底层数据结构就是使用ConcurrentHashMap实现的。与同是线程安全的老大哥HashTable相比,它已经更胜一筹,因此它的锁更加细化.

    2022年6月24日
    28
  • C++ stringstream 类的用法「建议收藏」

    C++ stringstream 类的用法「建议收藏」(转自:https://blog.csdn.net/nwpu_yike/article/details/22100615)一、类型转换——数字-&gt;字符串C++stringstream类是一种十分有用的类,特别是当我们需要在程序中使用字符串和数字数据互相转换的时候。要想在程序中使用stringstream类,我们需要在源程序文件中包含头文件include&lt;sstream&…

    2022年5月1日
    45
  • ubuntu LAMP 配置

    ubuntu LAMP 配置ubuntuLAMP配置文件位置:apache:/etc/apache2/apache2.confphp:/etc/php5/apache2/php.inimysql:/etc/mysql/my.cnfubuntuLAMP常见命令:apache重启:sudo/etc/init.d/apache2restart…

    2022年5月24日
    39
  • 什么是备兑开仓_期权如何备兑开仓

    什么是备兑开仓_期权如何备兑开仓小知识备兑开仓是指投资者在持有足额标的证券的基础上,卖出相应数量的认购期权合约。备兑开仓属于“抛补式”期权,也就是说投资者在合约到期时按行权价卖出标的证券的义务可以通过持有的标的证券予以履行。当认

    2022年8月6日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号