Android 连续点击出现多个 Activity 界面
有时候,多次点击按钮会多次打开 Activity,可能这都是一些误操作,并不是我们想要的结果。
一、通过时间控制
有时候,点击按钮后,可能会发起网络请求,很可能会多点了一次,此时可以通过时间来控制这种误操作。
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。(在AndroidManifest.xml文件中添加)
<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的四种启动模式
- standard模式:每次调用startActivity()启动时都会创建一个新的Activity放在栈顶(默认都是这个模式)
- singleTop模式:启动Activity时,指定Activity不在栈顶就创建,如在栈顶,则不再创建(不会出现两个相同的Activity相邻)
- singleTask模式:如果启动的Activity不存在就创建Activity,如果存在直接跳转到指定的Activity所在位置(在其上面的Activity会被移出栈,也就是一个栈中不能有重复的Activity)
- singleInstance模式:如果启动的Activity不存在就创建一个Activity同时创建一个栈,如果存在就将指定的Activity存在的栈移动到栈顶(表示这个Activity只能存在于一个独立的任务栈中,同应用的其它Activity与其无关)