Android连续点击两次按钮启动两次Activity
2015-12-31 16:27
531 查看
这个BUG 广泛存在很多APP中
分享个人在解决此类BUG一些想法。
一 ,通过activity的启动时间来处理此问题
1. 在 AndroidManifest.xml 中设置 Target Activity 的属性,设置它的 launchMode
关于 launchMode 的参数一共有 4 个:
Android代码
android:launchMode=["standard"| "singleTop" | "singleTask" | "singleInstance"]
四种模式 大家可以百度
简单介绍就是 standard 标准模式 每次启动新的activity 也是默认模式。
singleTop 只有一个实例在堆栈顶部,意思就是有则复用,这个方法会调用activity的 onnewIntent(Intent intent);
singlTask 在堆栈中只有一个实例,有则出栈 销毁上面的activity。让自己处于顶部。
singInstance
启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入.
2. 在代码里对 Intent 进行设置: 这我想说的是 setFlags 和 addFlags 之间的区别,
如果 setFlags 是可以改变原来 flag 设置, addFlags 如果原先有类似设置就不能被加入了
Android代码:
Intent intent = new Intent();
intent.setClass(getApplicationContext(), TargetActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);startActivity(intent);\
也可以在Mainfest中配置 代码中优先级大于Mainfest中的属性。
二 ,通过限制点击事件的间隔时间来解决,判断两次点击的时间间隔 小于500ms则忽略,实现起来也比较简单
public static boolean isFastDoubleClick() {
long time = System.currentTimeMillis();
long timeD = time - lastClickTime;
if (timeD >= 0 && timeD <= 500) {
return true;
} else {
lastClickTime = time;
return false;
}
}
具体就不说了。推荐使用第一种方式。
分享个人在解决此类BUG一些想法。
一 ,通过activity的启动时间来处理此问题
1. 在 AndroidManifest.xml 中设置 Target Activity 的属性,设置它的 launchMode
关于 launchMode 的参数一共有 4 个:
Android代码
android:launchMode=["standard"| "singleTop" | "singleTask" | "singleInstance"]
四种模式 大家可以百度
简单介绍就是 standard 标准模式 每次启动新的activity 也是默认模式。
singleTop 只有一个实例在堆栈顶部,意思就是有则复用,这个方法会调用activity的 onnewIntent(Intent intent);
singlTask 在堆栈中只有一个实例,有则出栈 销毁上面的activity。让自己处于顶部。
singInstance
启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入.
2. 在代码里对 Intent 进行设置: 这我想说的是 setFlags 和 addFlags 之间的区别,
如果 setFlags 是可以改变原来 flag 设置, addFlags 如果原先有类似设置就不能被加入了
Android代码:
Intent intent = new Intent();
intent.setClass(getApplicationContext(), TargetActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);startActivity(intent);\
也可以在Mainfest中配置 代码中优先级大于Mainfest中的属性。
二 ,通过限制点击事件的间隔时间来解决,判断两次点击的时间间隔 小于500ms则忽略,实现起来也比较简单
public static boolean isFastDoubleClick() {
long time = System.currentTimeMillis();
long timeD = time - lastClickTime;
if (timeD >= 0 && timeD <= 500) {
return true;
} else {
lastClickTime = time;
return false;
}
}
具体就不说了。推荐使用第一种方式。
相关文章推荐
- Android性能优化典范(三)
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android ImageView ScaleType清晰记录
- Android之JAVASe基础篇-面向对象-IO(九)
- Android——ViewPgaer切换动画
- Android 进程状态的概念
- Android 侧滑菜单
- 关于重载OnBackPressed无效的解决方案
- Parcelable和Serializable区别
- Mac环境下Android Studio移植FFmpeg
- [Android]使用Dagger 2依赖注入 - DI介绍(翻译)
- android studio 使用os文件。
- Android Framework/base 学习记录
- AndroidStudio集成极光推送
- Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解
- Android Studio入门到精通
- Android官方Training阅读笔记 ---- Managing the Activity Lifecycle(Stopping and Restarting an Activity) (三)
- Android源代码下载之《Android新闻client源代码》
- android自定义View之自定义EditText(添加删除功能)
- 反射与泛型--徒手教你写个Android数据库Dao层玩玩