关于android连续点击出现多个Activity界面的解决方法

 更新时间:2020年03月26日 16:51:15   作者:sapodilla  
这篇文章主要介绍了关于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界面的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • TabLayout实现ViewPager指示器的方法

    TabLayout实现ViewPager指示器的方法

    这篇文章主要为大家详细介绍了TabLayout实现ViewPager指示器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Android实现屏幕锁定源码详解

    Android实现屏幕锁定源码详解

    本篇文章主要介绍了Android实现屏幕锁定源码详解,屏幕锁定是一个很有用的功能,有需要的可以了解一下。
    2016-10-10
  • Flutter实现固定header底部滑动页效果示例

    Flutter实现固定header底部滑动页效果示例

    这篇文章主要为大家介绍了Flutter实现固定header底部滑动页效果示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Android中RecyclerView点击Item设置事件

    Android中RecyclerView点击Item设置事件

    这篇文章主要介绍了Android中RecyclerView点击Item设置事件的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • 五分了解Android Progress Bar进度条加载

    五分了解Android Progress Bar进度条加载

    这篇文章主要为大家介绍了Android Progress Bar进度条加载的实现及属性示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Flutter定时器、倒计时的快速上手及实战讲解

    Flutter定时器、倒计时的快速上手及实战讲解

    这篇文章主要给大家介绍了关于Flutter定时器、倒计时的快速上手及实战的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Flutter具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • 关于Android发送短信获取送达报告的问题(推荐)

    关于Android发送短信获取送达报告的问题(推荐)

    最近公司开发一个项目,要求app能够发送短信并获取送达报告。实现代码非常简单的,下面小编给大家分享关于Android发送短信获取送达报告的问题,感兴趣的朋友一起看看吧
    2017-03-03
  • Flutter开发之设置应用名称及图标的教程

    Flutter开发之设置应用名称及图标的教程

    这篇文章主要介绍了Flutter设置应用名称及图标的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Android用TextView实现跑马灯效果代码

    Android用TextView实现跑马灯效果代码

    大家好,本篇文章主要讲的是Android TextView实现跑马灯效果代码,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • 解析Android 如何获得已安装应用大小

    解析Android 如何获得已安装应用大小

    本篇文章是对Android获得已安装应用大小的解决方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06

最新评论