谈谈Android中的消息提示那些坑
Android中的消息提示无非就那几种,弹个窗(Toast或SnackBar),或者是弹出个对话框(Dialog),最近在使用的时候也是遇到了问题,有时候导致APP闪退
稍微研究会,总结了一下使用过程中需要注意的几个坑
需要切换到UI主线程
无论是使用弹窗或是弹个对话框,都需要在UI主线程中进行,否则就会导致APP闪退,由于自己经常是直接开个子线程进行网络请求的操作,偶尔会忘记切换回UI线程,就会导致闪退,提醒自己注意一下
自己封装了个弹窗方法作为BaseActivity一个方法中,这样之后新写的Activity页面都是继承这个BaseActivity,需要弹窗,调用方法很方便,连context也可以不用传,十分舒服
需要注意的是,封装记得在外层套个切换主线程的方法,如:
private void showToast(final String msg) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
});
}
切换UI主线程的方法详情进参考Android开发——实现子线程更新UI - Stars-one - 博客园
后台Service弹窗
首先,得声明一个悬浮窗权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
使用了后台服务,但需要弹个窗,可以使用下面的代码
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
AlertDialog dialog = new AlertDialog.Builder(BaseMsgService.this)
.setTitle("提示").setMessage(str).setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).create();
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
dialog.show();
}
});
悬浮窗权限
悬浮窗权限这单主要是针对的对话框,由于Android6.0引入了动态权限,如果从开启了一个Service,弹出对话框也会导致APP闪退,错误提示为:
permission denied for window type 2003
如下图所示

可能你的报错提示不是上面这个,但是有permission denied这两个字样,估计就是权限的问题
处理的方式很简单,只需要授权即可
//6.0以上需要获取弹窗权限,跳转到设置页面
if (Build.VERSION.SDK_INT >= 23) {
if (!Settings.canDrawOverlays(Login.this)) {
Toast.makeText(Login.this, "软件需要悬浮窗权限,跳转到设置页面请手动勾选允许", Toast.LENGTH_SHORT).show();
new Thread(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, 111);
}
});
}
}).start();
}
}
谈谈Android中的消息提示那些坑的更多相关文章
- 谈谈对Android中的消息机制的理解
Android中的消息机制主要由Handler.MessageQueue.Looper三个类组成,他们的主要作用是 Handler负责发送.处理Message MessageQueue负责维护Mess ...
- UWP中的消息提示框(二)
在UWP中的消息提示框(一)中介绍了一些常见的需要用户主动去干涉的一些消息提示框,接下来打算聊聊不需要用户主动去干涉的一些消息提示框.效果就是像双击退出的那种提示框. 先说说比较简单的吧,通过系统To ...
- 浅析Android中的消息机制(转)
原博客地址:http://blog.csdn.net/liuhe688/article/details/6407225 在分析Android消息机制之前,我们先来看一段代码: public class ...
- 浅析Android中的消息机制(转)
在分析Android消息机制之前,我们先来看一段代码: public class MainActivity extends Activity implements View.OnClickListen ...
- 浅析Android中的消息机制-解决:Only the original thread that created a view hierarchy can touch its views.
在分析Android消息机制之前,我们先来看一段代码: public class MainActivity extends Activity implements View.OnClickListen ...
- 浅析Android中的消息机制
在分析Android消息机制之前,我们先来看一段代码: public class MainActivity extends Activity implements View.OnClickListen ...
- 重温Android中的消息机制
引入: 提到Android中的消息机制,大家应该都不陌生,我们在开发中不可避免的要和它打交道.从我们开发的角度来看,Handler是Android消息机制的上层接口.我们在平时的开发中只需要和Hand ...
- 【转】Android中通知的提示音、震动和LED灯效果小例子
通知(Notification)是 Android 系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现.发出一条通知后,手机最上方 ...
- Android中的消息机制
在分析Android消息机制之前.我们先来看一段代码: public class MainActivity extends Activity implements View.OnClickListen ...
- UWP中的消息提示框(一)
不管什么平台,应用内难免会出现一些消息提示框,下面就来聊聊我在UWP里用到的消息提示框. 弹窗也可按是否需要用户操作促发一些逻辑进行分为两大类. 不需要用户干涉的一类: MessageDialog:操 ...
随机推荐
- CH57x/CH58x/CH59x主从机主动发起断连
如果在做应用的时需要同时使用使用两块板子分别做主从机或者使用一块板子做单独的从机: 这是我们需要按下某个按键或者发送某条指令主机或者从机主动断开与对方的连接且设备不需要复位: 主机端我们可以调用这样一 ...
- java代码实现自动生成数据库表er图
最近有同事看到字节跳动产品设计文档里有数据库表er图.就想问问又没有现成的工具也给直接生成一个er图,经查找验证发现并没有.因为现在表关系都是用的逻辑外键而非物理外键约束的,所以像navicat等工具 ...
- 小知识:开启NTP服务并设置为开机启动
我的一套测试环境发现时间慢了10分钟,影响我做各类测试. 首先就想到NTP服务,发现已安装NTP安装包,也有默认的NTP配置文件,只是没有启用. 用到的相关命令参考如下: [root@bogon ~] ...
- 【Unity3D】Tank大战
1 需求实现 项目代码见→坦克大战1.1.0 1)人机交互 玩家通过 ↑ ↓ ← → 键(或 W.S.A.D)键控制己方坦克平移: 玩家通过滑动鼠标右键控制己方坦克左右旋转: 玩家通过鼠标左键 ...
- 使用UTL_HTTP包获取网页内容
UTL_HTTP 包提供了容易的方式通过HTTP协议获取网页内容,下面结合几个例子介绍一下: ----------------------------------------------------- ...
- Go 中的反射 reflect 介绍和基本使用
一.什么是反射 在计算机科学中,反射(英语:reflection)是指计算机程序在运行时(runtime)可以访问.检测和修改它本身状态或行为的一种能力.用比喻来说,反射就是程序在运行的时候能够&qu ...
- geacon_pro配合catcs4.5上线Mac、Linux
最新最全文章见我个人博客: xzajyjs.cn 一些链接 Try师傅的catcs4.5项目: https://github.com/TryGOTry/CobaltStrike_Cat_4.5,最新版 ...
- gin框架中的c.Next()/c.Abort()
package main import ( "fmt" "github.com/gin-gonic/gin" ) func func1(c *gin.Conte ...
- Django重点
Django 简述python三大主流web框架 """ django 大而全,类似于航空母舰 但是有时候过于笨重 flask 小而精,类似于游骑兵(单行代码就可以起一个 ...
- Redis动态配制,限内存,免重启
p.p1 { margin: 0; font: 14px Menlo; color: rgba(0, 255, 255, 1); background-color: rgba(0, 0, 0, 0.8 ...