首页
学习
活动
专区
圈层
工具
发布

五年Android开发,让我“刻骨铭心”的那些坑

Activity在没有完全显示/已退出的情况下显示PopupWindow异常: 问题现象:进入Activity界面直接报错,log异常显示为:"Unable to add window -- token...方法第一个参数为需要依附的view),在Activity没有完全显示时,PopupWindow无法依附在该View上,如果在此时显示PopupWindow会导致上面的异常,同样在退出Activity后也不能正常显示...解决方案:如果在某个地方需要同时执行多个异步任务,强烈建议使用线程池; 数据库升级中的坑: 问题现象:在数据库的某个表中增加/修改了某个字段后,程序在运行时崩溃掉了;或者在增加字段时修改了数据库的版本号...Toast连续显示时长时间不消失: 问题现象:多个Toast同时显示时,Toast一直显示不消失,退出程序了仍然显示; 原因分析:看Toast的源码可以发现,同时显示多个toast时是排队显示的,所以才会出现同时显示多个...建议定义一个全局的Toast对象,这样可以避免连续显示Toast时不能取消上一次Toast消息的情况(如果你有连续弹出Toast的情况,避免使用Toast.makeText); build.gradle

1.9K40

Android开发笔记(七十一)区分开发模式和上线模式

所以从保密需要考虑,app在上线前都得去掉多余的调试信息,也就形成了上线模式。...Toast窗口无交互动作,样式也基本固定,因此除了少数弹窗可予以保留(如“再按一次返回键退出”),其他弹窗都应在发布时屏蔽。...所以Log可以连续打印,但Toast不能连续显示,因为每个弹窗都要停留个几秒,几十上百个弹窗至少得耗时几分钟才会全部显示完毕。...Toast虽然有好些个公开方法,可是常用的也就makeText和show两个方法,实际开发中一般都是下面一行代码就完事了。 Toast.makeText(this, "再按一次返回键退出!"...下面是异常消息提示对话框的代码例子: import android.annotation.SuppressLint; import android.app.AlertDialog; import android.content.Context

86420
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案

    如果在加载的时候,进行旋转,则会发生错误,异常退出(退出原因:dialog.dismiss()时发生NullPointException,因为与当前对话框绑定的FragmentManager为null,...在运行时配置发生变化时,在Fragment中保存有状态的对象 a) 继承Fragment,声明引用指向你的有状态的对象 b) 当Fragment创建时调用setRetainInstance(boolean...; import android.widget.Toast; /** * @author zhy * */ public class ConfigChangesTestActivity extends...效果图: 6、旋转屏幕的最佳实践 下面要开始今天的难点了,就是处理文章开始时所说的,当异步任务在执行时,进行旋转,如果解决上面的问题。...= activity) { activity.onTaskCompleted(); } } } 异步任务中,管理一个对话框,当开始下载前,进度框显示,下载结束进度框消失,并为Activity

    2.7K20

    【Android笔记】Android Service 服务

    这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind->onDestroy相应退出。...怎样确定那些程序可以运行,那些要被销毁,Android让每一个进程在一个重要级的基础上运行,重要级低的进程最有可能被淘汰,一共有5级,下面这个列表就是按照重要性排列的: 1 一个前台进程显示的是用户此时需要处理和显示的...3 一个服务进程是一个通过调用startService()方法启动的服务,并且不属于前两种情况。尽管服务进程没有直接被用户看到,但他们确实是用户所关心的,比如后台播放音乐或网络下载数据。...所以系统保证他们的运行,直到不能保证所有的前台可见程序都正常运行时才会终止他们。...通常,后台进程会有很多个在运行,所以他们维护一个LRU最近使用程序列表来保证经常运行的activity能最后一个被终止。

    1.1K10

    Android Service 服务(一)—— Service

    这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind->onDestroy相应退出。 ...怎样确定那些程序可以运行,那些要被销毁,Android让每一个进程在一个重要级的基础上运行,重要级低的进程最有可能被淘汰,一共有5级,下面这个列表就是按照重要性排列的: 1 一个前台进程显示的是用户此时需要处理和显示的...3 一个服务进程是一个通过调用startService()方法启动的服务,并且不属于前两种情况。尽管服务进程没有直接被用户看到,但他们确实是用户所关心的,比如后台播放音乐或网络下载数据。...所以系统保证他们的运行,直到不能保证所有的前台可见程序都正常运行时才会终止他们。...通常,后台进程会有很多个在运行,所以他们维护一个LRU最近使用程序列表来保证经常运行的activity能最后一个被终止。

    1.9K30

    Android Service 服务解说

    这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind->onDestroy相应退出。...怎样确定那些程序可以运行,那些要被销毁,Android让每一个进程在一个重要级的基础上运行,重要级低的进程最有可能被淘汰,一共有5级,下面这个列表就是按照重要性排列的: 1 一个前台进程显示的是用户此时需要处理和显示的...3 一个服务进程是一个通过调用startService()方法启动的服务,并且不属于前两种情况。尽管服务进程没有直接被用户看到,但他们确实是用户所关心的,比如后台播放音乐或网络下载数据。...所以系统保证他们的运行,直到不能保证所有的前台可见程序都正常运行时才会终止他们。...通常,后台进程会有很多个在运行,所以他们维护一个LRU最近使用程序列表来保证经常运行的activity能最后一个被终止。

    81430

    APP级别处理未捕获异常

    前言:   项目APP有时候会出现Crash,然后就是弹出系统强制退出的对话框,点击关闭APP。   ...有的APP进行了处理,会发现,当程序出现异常的时候,会Toast一个提示“程序出现异常,3秒后将退出程序”。3秒后即关闭程序而不再显示强制关闭的对话框。   ...(context,"程序出现异常,2秒后退出",Toast.LENGTH_SHORT).show(); Looper.loop(); }..." android:supportsRtl="true" android:name=".MApplication" android:theme="@style...所以总会有没有捕获到的异常出现。 进行对未捕获异常的处理,可以提高一个用户体验。 开发者们 也可以 在这个处理中添加异常分析,将出现的异常设备、原因、时间等信息提交到自己的服务器上方便以后分析。

    2K60

    Toast与Snackbar的那点事

    Toast在Android 7.1.2(API25)以下会发生BadTokenException异常,导致App崩溃。...自定义TYPE_TOAST类型的Window,在Android 7.1.1、7.1.2发生token null is not valid异常,导致App崩溃。...调用service.enqueueToast(pkg, tn, mDuration)将当前Toast的显示加入到通知队列,并传递了一个tn对象,这个对象就是NMS用作回传Toast的显示状态。...首先想到就是对Toast加上try-catch,但是发现不起作用,原因是这个异常并非在当前线程中立即被抛出的,而是添加到了消息队列中,等待消息真正执行时才会被抛出。...Google在Android 8.0的代码提交中修复了这个问题,把8.0的源码和前一版本对比可以发现,如同我们的分析,Google在消息执行处将异常catch住了。

    2.8K60

    Toast问题深度剖析(一)

    异常和偶尔不显示的问题 当你在程序中调用了 Toast 的 API,你可能会在后台看到类似这样的 Toast 执行异常: android.view.WindowManager$BadTokenException...android.widget.Toast$TN.handleShow(Toast.java:459) 另外,在某些系统上,你没有看到什么异常,却会出现 Toast 无法正常展示的问题。...为了解释上面这些问题产生的原因,我们需要先读一遍 Toast 的源码。 2. Toast 的显示和隐藏 首先,所有 Android 进程的视图显示都需要依赖于一个窗口。...异常产生的原因 上面我们分析了 Toast 的显示和隐藏的源码流程,那么为什么会出现显示异常呢?我们先来看下这个异常是什么呢?...当进程异常退出后我们截取他们的日志可以得到: 12-28 11:10:30.086 24599 24599 E AndroidRuntime: android.view.WindowManager$BadTokenException

    6.4K182

    浅谈SnackBar(Toast大兄弟)

    SnackBar是 Android Support Library 22.2.1 里面新增提供的一个控件,我们可以简单的把它理解成一个加强版的Toast,或者是一个轻量级的Dialog。...特点: 1.SnackBar和Toast的用途一样,都是用来提示用户操作后的结果的。 2.SnackBar显示时位置一般是在屏幕底部,较大的设备就显示在左下角。...Toast那样 退出Activity了,Toast还继续显示的问题) 6.SncakBar能支持侧滑 看一下SnackBar的使用方法: 三个参数:View ,内容文本,显示时长 public...的使用类似 Toast的三个参数:上下文,内容文本,显示时长 Toast.makeText(this,"Toast内容",Toast.LENGTH_SHORT).show(); 可以看出,SnackBar...",Snackbar.LENGTH_SHORT).show(); } }); } }  显示前: ?

    99240

    信息提醒之Toast-更新中

    因此,再显示Toast信息提示框的同时,屏幕上的控件仍然可以继续操作。 Toast的基本用法 显示Toast需要使用android.widget.Toast类。...只显示文本的Toast 如果只是显示文本的话,可以用如下代码 Toast toast = Toast.makeText(this,"文字",Toast.LENGTH_LONG); toast.show(...该方法的第二个参数是要显示的信息, 第三个参数标识Toast提示信息显示的时间。...一下代码会抛出异常 Toast toast = new Toast(); toast.setText("文字");// 此行代码会抛出异常 toast.show(); 显示文本和图像的Toast- setView...> 如果同时多个Toast信息提示框,系统会将这些Toast信息提示框放到队列中,等前一个Toast信息提示框关闭后会显示下一个Toast信息提示框,也就是说Toast信息提示框是按顺序显示的 ----

    95550

    浅谈SnackBar(Toast大兄弟)

    SnackBar是 Android Support Library 22.2.1 里面新增提供的一个控件,我们可以简单的把它理解成一个加强版的Toast,或者是一个轻量级的Dialog。...特点: 1.SnackBar和Toast的用途一样,都是用来提示用户操作后的结果的。 2.SnackBar显示时位置一般是在屏幕底部,较大的设备就显示在左下角。...Toast那样 退出Activity了,Toast还继续显示的问题) 6.SncakBar能支持侧滑 看一下SnackBar的使用方法: 三个参数:View ,内容文本,显示时长 public...的使用类似 Toast的三个参数:上下文,内容文本,显示时长 Toast.makeText(this,"Toast内容",Toast.LENGTH_SHORT).show(); 可以看出,SnackBar...",Snackbar.LENGTH_SHORT).show(); } }); } }  显示前: ?

    83740

    AllowBackup,打开子应用,不显示桌面图标的子apks,label标签的区别,AndroidManifest.xml中的package

    该漏洞的解决方案: 1.将allowBackup 的值设置为false;(allowBackup的值为false 对项目运行没有任何影响) 2.通过手机设备的IMEI号来辨识来设备编号和备份前是否一致,...(), "没有该子APP,请下载安装", * Toast.LENGTH_LONG).show(); } */ Intent intent = new...; } } 不显示桌面图标的子apks 其中要想不显示桌面图标只需修改AndroidManifest.xml文件即可。...)会自动检测系统已经安装的应用软件的包名,然后把这些APP的图标和名称解析出来后显示在应用程序列表里,一旦我们像上面那样设置不显示APK图标,则APK程序在运行后只会显示在“正在运行”的程序列表中,而不会在桌面上显示图标和名字...本包名应当在Android系统运行时唯一。

    52210

    android程序崩溃后重启

    首先捕获程序崩溃的异常就必须了解一下java中UncaughtExceptionHandler这个接口,android沿用了此接口,在android API中: ?...在实现UncaughtExceptionHandler时,必须重载uncaughtException(Thread thread, Throwable ex) ,如果我们没有实现该接口 也就是没有显示捕捉异常...来显示异常信息   new Thread(){     @Override public void run() {                     Looper.prepare...();                     Toast.makeText(application.getApplicationContext(), "很抱歉,程序出现异常,即将退出...如何杀死异常进程,重启应用,就得使用PendingIntent,这个类是android中对Intent类的包装,具体了解我会在写一篇博客,自己也可以去查看android API。

    2.8K70

    Service基础

    概述 Service是Android四大组件之一,主要两个目的: 后台运行和跨进程访问。 通过启动一个Service,可以在不显示界面的前提下在后台运行指定的任务,这样可以不影响用户做其他事情。...import android.os.IBinder; import android.view.View; import android.widget.Button; import android.widget.Toast...getRunningServices(int maxNum) maxNum表示返回正在运行的服务的最大数,如果正在运行的服务小于maxNum,则按照实际数量返回,一般可以将该参数的值设置为一个较大的值...(ServiceDemoAct.this, "服务正在运行...服务的名字,如果此项不设置,那么默认显示的服务名则为类名 android:icon  --------------  服务的图标 android:permission  -------  申明此服务的权限

    2.3K70
    领券