学而实习之 不亦乐乎

Android 连续点击出现多个 Activity 界面

2023-08-02 07:45:52

有时候,多次点击按钮会多次打开 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的四种启动模式

  1. standard模式:每次调用startActivity()启动时都会创建一个新的Activity放在栈顶(默认都是这个模式) 
  2. singleTop模式:启动Activity时,指定Activity不在栈顶就创建,如在栈顶,则不再创建(不会出现两个相同的Activity相邻) 
  3. singleTask模式:如果启动的Activity不存在就创建Activity,如果存在直接跳转到指定的Activity所在位置(在其上面的Activity会被移出栈,也就是一个栈中不能有重复的Activity) 
  4. singleInstance模式:如果启动的Activity不存在就创建一个Activity同时创建一个栈,如果存在就将指定的Activity存在的栈移动到栈顶(表示这个Activity只能存在于一个独立的任务栈中,同应用的其它Activity与其无关)