首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在自定义对话框dismiss()之后调用finish()时,Android活动崩溃

在自定义对话框dismiss()之后调用finish()时,Android活动可能会崩溃。这是因为dismiss()方法是异步执行的,即使对话框已经消失,活动仍然在继续执行。当调用finish()方法时,活动会尝试销毁自身,但由于dismiss()方法尚未完成,活动可能无法正确处理销毁过程,从而导致崩溃。

为了避免这种崩溃,可以使用Handler来延迟调用finish()方法,以确保dismiss()方法已经完成。具体步骤如下:

  1. 在活动中创建一个Handler对象。
代码语言:txt
复制
private Handler mHandler = new Handler();
  1. 在dismiss()方法之后调用finish()方法的地方,使用postDelayed()方法来延迟调用finish()。
代码语言:txt
复制
dialog.dismiss();
mHandler.postDelayed(new Runnable() {
    @Override
    public void run() {
        finish();
    }
}, 100);

上述代码中的100表示延迟的时间,单位为毫秒。可以根据实际情况进行调整。

这样做的原理是通过Handler将finish()方法的调用放入消息队列中,等待一段时间后执行。这样可以确保dismiss()方法已经完成,避免活动崩溃。

需要注意的是,这种解决方案只适用于在dismiss()之后立即调用finish()的情况。如果存在其他异步操作,需要根据具体情况进行处理。

推荐的腾讯云相关产品:无

希望以上信息能对您有所帮助。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

has leaked window com.android.internal.policy.impl.PhoneWindow解决(Dialog.cancel、dismiss、hide区别)

项目中有个Activity中用到了ProgressDialog,而在跳转到下个Activity时就会报这个错: has leaked window com.android.internal.policy.impl.PhoneWindow...Context context) {         super(context);         initFormats();     } 这样就可以理解为什么跳转时会提示这个错误了,我在finish...dismiss方法会释放对话框所占的资源,而hide方法不会。activity退出前必须调用dismiss方法关闭对话框。...所以,最正确的调用方法是,在activity的onDestory方法里调用dismiss方法,其他地方都用hide方法隐藏对话框。...现在问题清楚了,就是如果你在创建AlertDialog的时候调用了setOnCancelListener 这个mCancelMessage变量有作用,否则dismiss和cancel等同。

54720
  • Android常用对话框大全——Dialog「建议收藏」

    今天就来谈谈开发中经常用的到的一个控件——Dialog,对话框一般我们就用来提示一些信息给用户, 让用户自主选择,或者在一些操作不可逆的情况下我们提示用户是否继续操作, 下面就让我们一起来学习吧。...所以可以看出对话框使用了一个建造者模式在调用函数的时候就可以一直直点点点链式调用。...六:完全自定义的对话框 上面我们说了可以通过调用.setView(view)方法,自定义其显示的内容;但是你会觉得这远远不够我还想把他的标题或者底部按钮给改了,那么就需要来个完全自定义了,如下:...首先我们需要自定义Dialog的style,让他自己本有的东西全部透明,然后在设置我们自己的内容就可以达到完全自定义的效果了。... 接下来就可以为对话框设置我们自定义的style了. /** * 自定义对话框 */ private void customDialog() {

    4.2K30

    浅谈 Android 自定义锁屏页的发车姿势

    在 Android 5.0 之后引入了 Material Design,状态栏和导航栏也玩出了更多花样。...ACTION_USER_PRESENT广播是系统锁屏解锁广播,当系统锁屏页解锁时就会触发。如果在接收到这一广播时,将自定义锁屏页finish掉,就能避免在指纹解锁成功后自定义锁屏页仍然显示的问题。...但是细心的读者会发现这种解法在逻辑上还存在问题,因为在用户没有设置锁屏密码的情况下,前文自定义锁屏页在onCreate()时设置的FLAG_DISMISS_KEYGUARD标志位能够轻易解锁系统的锁屏页...NOTIFY_USER_PRESENT是自定义广播,用来通知锁屏页Activity调用finish方法。   ...而如果设置了锁屏密码,FLAG_DISMISS_KEYGUARD必然无法解锁系统锁屏,到达不了上述代码块,也不会finish。这样就避免了自定义锁屏页刚创建出来就将自己finish掉的困境。

    3.9K91

    浅谈Android自定义锁屏页的发车姿势

    在 Android 5.0 之后引入了 Material Design,状态栏和导航栏也玩出了更多花样。...ACTION_USER_PRESENT广播是系统锁屏解锁广播,当系统锁屏页解锁时就会触发。如果在接收到这一广播时,将自定义锁屏页finish掉,就能避免在指纹解锁成功后自定义锁屏页仍然显示的问题。...但是细心的读者会发现这种解法在逻辑上还存在问题,因为在用户没有设置锁屏密码的情况下,前文自定义锁屏页在onCreate()时设置的FLAG_DISMISS_KEYGUARD标志位能够轻易解锁系统的锁屏页...NOTIFY_USER_PRESENT是自定义广播,用来通知锁屏页Activity调用finish方法。...而如果设置了锁屏密码,FLAG_DISMISS_KEYGUARD必然无法解锁系统锁屏,到达不了上述代码块,也不会finish。这样就避免了自定义锁屏页刚创建出来就将自己finish掉的困境。

    2.3K80

    Android开发笔记(六十六)自定义对话框

    下面是Dialog的常用方法: Dialog构造函数 : 可定义对话框的主题样式(样式在styles.xml中定义)。如是否有标题、是否为半透明、对话框的背景等等。...isShowing : 判断对话框是否显示。 show : 显示对话框。 hide : 隐藏对话框。 dismiss : 关闭对话框。...默认会自动关闭 getWindow : 获取对话框的界面对象。 其中getWindow方法是自定义对话框的关键,首先获取到对话框所在的界面对象,才能往这个界面上添加定制视图。...废话少说,直接上个自定义对话框的代码例子作为说明: import com.example.exmdialog.R; import android.app.Dialog; import android.content.Context..." /> 仿ios的滚轮对话框 自定义对话框费了许多口舌,现在说点正经的应用。

    2.6K20

    Android AsyncTask完全解析,带你从源码的角度彻底理解

    在继承时我们可以为AsyncTask类指定三个泛型参数,这三个参数的用途如下: 1. Params 在执行AsyncTask时需要传入的参数,可用于在后台任务中使用。 2....Android照片墙应用实现,再多的图片也不怕崩溃 这篇文章中例子的运行结果也证实了这个结论。...不过你可能还不知道,在Android 3.0之前是并没有SerialExecutor这个类的,那个时候是直接在AsyncTask中构建了一个sExecutor常量,并对线程池总大小,同一时刻能够运行的线程数做了规定...而线程池中最大能存放的线程数是128个,当我们尝试去添加第129个任务时,程序就会崩溃。...因此在3.0版本中AsyncTask的改动还是挺大的,在3.0之前的AsyncTask可以同时有5个任务在执行,而3.0之后的AsyncTask同时只能有1个任务在执行。

    83550

    项目需求讨论-Android 自定义Dialog实现步骤及封装

    比如下面在登录界面的二个对话框效果。都是我在做具体项目中所要求实现的: 1.输入有误时弹出的对话框 ? 2.选择角色登录时的对话框 ?...这里倒不是说自定义Dialog的教程,因为自定义Dialog大家基本都会。只是我在登录界面写了这二个Dialog之后,我就觉得好烦,然后决定封装了一个类,因为后面不同界面还有很多不同的弹框。...,我们在屏幕上触摸对话框以外的屏幕的界面,对话框会默认消失。...不过最多的应该还是调用heightDimenRes()方法。因为一般我们在写自定义layout布局的时候,height和width的数值肯定是去dimen.xml中获取。...所以我们在代码中生成这个自定义对话框的时候,也就直接调用了heightDimenRes(R.dimen.XXX)。这样。

    1.5K31

    项目需求讨论 - Android 自定义 Dialog 实现步骤及封装

    在项目中,我们会遇到各种各样的界面需求,比如对话框和选择框,都是会配合具体项目的UI界面来做,而不是说用自带的弹出框。比如下面在登录界面的二个对话框效果。...都是我在做具体项目中所要求实现的: 1.输入有误时弹出的对话框 2.选择角色登录时的对话框 这里倒不是说自定义Dialog的教程,因为自定义Dialog大家基本都会。...只是我在登录界面写了这二个Dialog之后,我就觉得好烦,然后决定封装了一个类,因为后面不同界面还有很多不同的弹框。为后期节省时间。...不过最多的应该还是调用heightDimenRes()方法。因为一般我们在写自定义layout布局的时候,height和width的数值肯定是去dimen.xml中获取。...所以我们在代码中生成这个自定义对话框的时候,也就直接调用了heightDimenRes(R.dimen.XXX)。这样。

    1.1K10

    Android-浅谈广播机制,实现强制下线功能

    标准广播: 是一种完全异步执行的广播,在广播发出之后,所有的广播接收器都会在同一时间接收到这条广播消息,因此他们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。...有序广播: 是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够接收到这条广播消息,当这个广播接收器中的逻辑执行完毕之后,广播才会继续传递。所以此时的广播接收器是有前后顺序的。...而不必在每个页面都编写一个弹出对话框的逻辑,因为你不知道用户此时在哪里。 强制下线的功能需要关闭所有活动,然后回到登录界面。...,注意这一定要调用 setCancelable() 方法将对话框设置为不可取消,否则用户点一下返回键就可以关闭对话框并据需使用程序了。...然后使用setPositiveButton()方法来给用户对话框注册确定按钮,当用户点击了确定按钮时,就调用强制下线功能来销毁所有活动,并重新启动登录界面。

    92130

    手机卫士黑名单功能(ListView结合SQLite增删改)

    修改界面,在顶部横条上增加一个添加按钮,点击打开一个自定义对话框,输入电话号码和拦截模式保存到数据库 自定义对话框看这篇http://www.cnblogs.com/taoshihan/p/5370378...对象的dismiss()方法,可以关闭对话框 调用View对象的findViewById()方法,获取到各个控件的值,进行判断处理 调用之前定义好的Dao类BlackNumberAdo对象的add()方法...add()方法,添加一条数据,参数:0(第一个),数据 调用ListAdapter对象的notifyDataSetChanged()方法,通知数据更新 删除记录 条目布局文件中,在右侧放置一个垃圾桶的小图标...Button对象,设置点击事件 获取AlertDialog.Builder对象,展示是否确认删除的对话框 调用AlertDialog.Builder对象,设置确认按钮和取消按钮,注意设置点击事件OnClickListener...时,它所在的包是DialogInterface.OnClickListener 调用之前定义好的Dao类BlackNumberAdo对象的delete()方法,参数:String电话号码 调用集合List

    89730

    AsyncTask使用和源码解析

    AsyncTask 介绍 在Android中提起异步通信我们都会想到Handler,之前写过一篇文章又一年对Android消息机制(Handler&Looper)的思考 。...在继承时我们可以为AsyncTask类指定三个泛型参数,这三个参数的用途如下: Params:在执行AsyncTask时需要传入的参数,可用于在后台任务中使用。...经常需要去重写的方法有以下四个: onPreExecute() 这个方法会在后台任务开始执行之间调用,用于进行一些界面上的初始化操作,比如显示一个进度条对话框等。...onPostExecute(Result) 当后台任务执行完毕并通过return语句进行返回时,这个方法就很快会被调用。...,用于进行一些界面上的初始化操作,比如显示一个进度条对话框等。

    66320

    Android基础部分再学习---activity的生命周期

    在整个生命周期的活动中,系统可能会调用onStart()和onStop()多次,因为活动之间交替进行隐藏或显示给用户。...执行完之后, onStart()方法是可见但是不可以操作 finish方法的问题: 当你在onClick事件里面写 startacitivity的时候,在前面执行finish方法和在后面执行finish...3、onStart和onRestart、onStop Activity进入到Stopped状态之后,它极有可能被系统所回收,在某些极端情况下,系统可能是直接杀死应用程序的进程,而不是调用onDestory...有时候也需要在onPause判断用户是调用finish结束这个Activity,还是暂时离开,以便区分处理。这时候可以调用isFinishing()方法来判断。...3.如何强制性关闭一个activity Android下结束进程的方法   一、结束一个活动Activity   要主动的结束一个活动Activity,使用finish方法,而且这个方法最后会调用Activity

    91520
    领券