当我在自己的“uncaughtException()”方法中显示警报时,为什么我的应用程序会卡住?

时间:2011-01-05 19:08:16

标签: android exception alertdialog

这是我的代码:(“Apagar”表示“关闭”,“reiniciar”表示“重启”)

public void uncaughtException(Thread thread, Throwable ex)
{
    try
    {
        AlertDialog alertDialog;
        alertDialog = new AlertDialog.Builder(iAct).create();
        //alertDialog.setTitle("");
        alertDialog.setMessage("Se ah producído un error y la aplicación no puede continuar funcionando." +
                               "¿Desea reiniciarla o finalizarla?");
        alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "Reiniciar", new ReiniciarOnClickListener(iAct));
        alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE,"Apagar", new ApagarOnClickListener(iAct));
        alertDialog.show();
    }catch(Exception e){
        Thread.setDefaultUncaughtExceptionHandler(iDefaultHandler);
        iDefaultHandler.uncaughtException(thread, ex);
    }
}

执行Try块内的所有代码,但从不显示警报,并且屏幕保持灰色。

iDefaultHandler中,我在保留getDefaultUncoughtException()之前保存了{{1}}的结果。

缺少任何信息,请索取。我不知道如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

尝试取出.create()。只需初始化AlertDialog然后显示它。

答案 1 :(得分:0)

您是否尝试过使用onCreateDialog来构建对话框?类似的东西:

private static final int DIALOG_UNCAUGHT_EXCEPTION = 0;

...

public void uncaughtException(Thread thread, Throwable ex)
{
    try
    {
        showDialog(DIALOG_UNCAUGHT_EXCEPTION);
    }catch(Exception e)
    {
        Thread.setDefaultUncaughtExceptionHandler(iDefaultHandler);
        iDefaultHandler.uncaughtException(thread, ex);
    }
}

@Override
protected Dialog onCreateDialog(int id) {
    Dialog dialog;
    switch (id) {
    case DIALOG_UNCAUGHT_EXCEPTION:
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
        alertDialog.setMessage("message")
            .setPositiveButton("Reiniciar",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // do stuff;
                }
            })
            .setNegativeButton("Apagar",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // do other stuff;
                }
            });
        alertDialog.create();
        break;
    default:
        dialog = null;
        break;
    }
    return dialog;
}

显然,如果需要,可以用自己的默认按钮监听器替换。