前言

开始始学习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。

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的对象  ArrayListlist=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界面的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

更多相关文章

  1. 58同城android客户端手机号码解密方法
  2. Android探索之旅 | 面向对象和Java基础
  3. Android默认USB为host模式
  4. android 开发使用 kotlin 进行点击事件监听和界面跳转,直接传也方
  5. Unable to start activity ComponentInfo 解决方法
  6. Android 安装apk的方法
  7. Android SQLite数据库解析并使用两种方法实现增删改查

随机推荐

  1. [读书笔记] Android(安卓)Toast 显示时间
  2. Android原生SpeechRecognizer(语音识别)
  3. 【Android】NDK的使用常见问题
  4. TextView属性大全
  5. 从UA类型设备分辨出Android设备类型
  6. xmlns:android和xmlns:mi
  7. 理解Android的layout和measure
  8. Android的源代码结构
  9. Activity的启动
  10. Android自定义标题栏