关于android连续点击出现多个Activity界面的解决方法
前言
开始始学习android,对android的启动模式没有什么了解,就使用了时间判断是否重复点击了两次按钮,启动另外的activity界面,这样的控制方法,有时候会失效,比如,两秒钟还未启动另外的activity,那么又可以重复点击。所以,就调整为android的启动模式来控制重复出现多个acitvity。
一、通过时间控制点击次数:
这种方式对应控制网络请求不错。
public class nodoubleclickutil { private static long lastclicktime; private final static int space_time =2000; public static void initlastclicktime() { lastclicktime = 0; } public synchronized static boolean isdoubleclick() { long currenttime = system.currenttimemillis(); boolean isclickdouble; if (currenttime - lastclicktime > space_time) { isclickdouble = false; } else { isclickdouble = true; } lastclicktime = currenttime; return isclickdouble; } }
二、通过launchmode启动模式控制出现多个activity的方式:
这种方式真正意义上杜绝了同时出现相同的多个activity。
<activity android:name=".internethospital.internethospitalinquirycallui"
android:launchmode="singleinstance"/>
或者在代码中设置:
intent intent = new intent(); intent.setclass(getapplicationcontext(), targetactivity.class); intent.setflags(intent.flag_activity_single_top); startactivity(intent);
三、android的四种启动模式:
1、standard模式:每次调用startactivity()启动时都会创建一个新的activity放在栈顶(默认都是这个模式)
2、singletop模式:启动activity时,指定activity不在栈顶就创建,如在栈顶,则不再创建(不会出现两个相同的activity相邻)
3、singletask模式:如果启动的activity不存在就创建activity,如果存在直接跳转到指定的activity所在位置(在其上面的activity会被移出栈,也就是一个栈中不能有重复的activity)
4、singleinstance模式:如果启动的activity不存在就创建一个activity同时创建一个栈,如果存在就将指定的activity存在的栈移动到栈顶(表示这个activity只能存在于一个独立的任务栈中,同应用的其它activity与其无关)
补充知识:android中退出多个activity的两个经典方法
一种把每个activity用集合记住,然后逐一干掉;另一种思路是使用广播。
方法一、用list保存activity实例,然后逐一干掉
创建一个外部类继承application用来存放activity
public class myactvity extends application { //创建一个集合,用来存放activity的对象 arraylist<activity>list=new arraylist<>(); //声明一个本类的对象 private static myactvity instance; public myactvity() { } //创建一个方法,用来初始化myactivity的对象,并且初始化的对像的返回 public synchronized static myactvity getinstance(){ if (instance==null){ instance=new myactvity(); } return instance; } //调用此方法用来向集合当中添加activity对象 public void addactivity(activity activity){ list.add(activity); } //判断activity是否已经在集合当中 public boolean isexitlist(activity activity){ if (list.contains(activity)){ return true; } return false; } //当调用此方法的时候,关闭所有的activity public void exit(){ for (activity activity:list){ activity.finish(); } //退出当前的myactivity system.exit(0); } @override public void onlowmemory() { super.onlowmemory(); //当系统的存储空间不够的时候,调用系统的垃圾回收期,清理里面的垃圾 system.gc(); } }
activity1代码:
public class mainactivity extends appcompatactivity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); //调用存放activity类 myactvity instance = myactvity.getinstance(); //判断存放activity类是否存放该activity,不存在加入类 if (!instance.isexitlist(this)){ instance.addactivity(this); } intent intent = new intent(this, main2activity.class); startactivity(intent); } }
activity2代码:
public class main2activity extends activity { private myactvity instance; /** * called when the activity is first created. */ @override+ super.oncreate(savedinstancestate); setcontentview(r.layout.sdfa); button bt= (button) findviewbyid(r.id.bt); instance = myactvity.getinstance(); if (!instance.isexitlist(this)){ instance.addactivity(this); } bt.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { //调用exit()方法销毁里面所有activity instance.exit(); } }); } }
方法二、使用广播在activity里注册广播,销毁时启动广播
mainactivity里注册广播:
public class mainactivity extends appcompatactivity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); intent intent = new intent(this, main2activity.class); startactivity(intent); //注册广播 intentfilter intentfilter = new intentfilter(); intentfilter.addaction(define.pahname); registerreceiver(new myreceiver(),intentfilter); } class myreceiver extends broadcastreceiver{ @override public void onreceive(context context, intent intent) { unregisterreceiver(this); ((activity)context).finish(); } } }
activity2:启动广播
public class main2activity extends activity { @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.sdfa); button bt= (button) findviewbyid(r.id.bt); bt.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { intent intent = new intent(define.pahname); sendbroadcast(intent); finish(); } }); } }
以上这篇关于android连续点击出现多个activity界面的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
下一篇: 男人为何会出轨 女人保养至关重要