android dialog 模式,Android Modal Dialog实现了Singleton模式

MY SINGLETON MODAL DIALOG CLASS

⁃ public class CustomDialogMsgOneBtn

⁃ {

⁃ private static CustomDialogMsgOneBtn _instance;

⁃ private UIHandler uiHandler;

⁃ public Context _context;

⁃ public Dialog _dialog;

⁃ private Object synchObject = new Object();

⁃ private TextView _tvDialogTitle;

⁃ private TextView _tvDialogMessage;

⁃ private String _dialogTitle;

⁃ private String _dialogMessage;

⁃ private Button _btnDialogOk;

⁃ private String _btnTextOk;

⁃ private CustomDialogMsgOneBtn()

⁃ {

⁃ }

⁃ public static CustomDialogMsgOneBtn getInstance()

⁃ {

⁃ if( _instance == null )

⁃ {

⁃ _instance = new CustomDialogMsgOneBtn();

⁃ }

⁃ return _instance;

⁃ }

⁃ public void setTitleAndMessage( String title, String msg )

⁃ {

⁃ this._dialogTitle = title;

⁃ this._dialogMessage = msg;

⁃ }

⁃ public void initDialog( Context c )

⁃ {

⁃ _context = c;

⁃ }

⁃ public void setButtonTextOk( String sText )

⁃ {

⁃ this._btnTextOk = sText;

⁃ }

⁃ private void constructUiThread()

⁃ {

⁃ HandlerThread uiThread = new HandlerThread( "UIHandler" );

⁃ uiThread.start();

⁃ uiHandler = new UIHandler( uiThread.getLooper() );

⁃ }

⁃ public void show()

⁃ {

⁃ try

⁃ {

⁃ constructUiThread();

⁃ uiHandler.sendEmptyMessage( 0 );

⁃ synchronized( synchObject )

⁃ {

⁃ try

⁃ {

⁃ synchObject.wait();

⁃ }

⁃ catch( InterruptedException e )

⁃ {

⁃ e.printStackTrace();

⁃ }

⁃ }

⁃ }

⁃ catch( Exception e )

⁃ {

⁃ e.printStackTrace();

⁃ }

⁃ }

⁃ public void dismissDialog()

⁃ {

⁃ _dialog.dismiss();

⁃ }

⁃ private final class UIHandler extends Handler

⁃ {

⁃ public View.OnClickListener btnListener = new View.OnClickListener()

⁃ {

⁃ @Override

⁃ public void onClick( View v )

⁃ {

⁃ int id = v.getId();

⁃ if( id == R.id.btnDialogOk )

⁃ {

⁃ Log.d( "dialog Ok", "Ok" );

⁃ notifySync();

⁃ }

⁃ }

⁃ };

⁃ public DialogInterface.OnDismissListener dialogOnDismissListener = new DialogInterface.OnDismissListener()

⁃ {

⁃ @Override

⁃ public void onDismiss( DialogInterface dialog )

⁃ {

⁃ notifySync();

⁃ Log.d( "dialog being dismissed", "dismiss ang dialog" );

⁃ }

⁃ };

⁃ public UIHandler( Looper looper )

⁃ {

⁃ super( looper );

⁃ }

⁃ @Override

⁃ public void handleMessage( Message msg )

⁃ {

⁃ _dialog = new Dialog( _context );

⁃ _dialog.requestWindowFeature( Window.FEATURE_NO_TITLE );

⁃ _dialog.setCanceledOnTouchOutside( true );

⁃ _dialog.setContentView( R.layout.dialog_message_one_button );

⁃ _dialog.setOnDismissListener( dialogOnDismissListener );

⁃ _tvDialogTitle = (TextView)_dialog.findViewById( R.id.txtDialogTitle );

⁃ _tvDialogMessage = (TextView)_dialog.findViewById( R.id.txtDialogMsg );

⁃ _btnDialogOk = (Button)_dialog.findViewById( R.id.btnDialogOk );

⁃ _tvDialogTitle.setText( _dialogTitle );

⁃ _tvDialogMessage.setText( _dialogMessage );

⁃ _btnDialogOk.setText( _btnTextOk );

⁃ _btnDialogOk.setOnClickListener( btnListener );

⁃ _dialog.show();

⁃ }

⁃ private void notifySync()

⁃ {

⁃ synchronized( synchObject )

⁃ {

⁃ _dialog.dismiss();

⁃ synchObject.notifyAll();

⁃ }

⁃ }

⁃ }// end UIHanlder class

⁃ } //end Class

___HOW I CALL IT ON MY ACTIVITY CLASS

CustomDialogMsgTwoBtn.getInstance().initDialog(this);

CustomDialogMsgTwoBtn.getInstance().setLeftAndRightButtonText( "cancel", "accept" );

CustomDialogMsgTwoBtn.getInstance().setTitleAndMessage( "Custom Dialog", "test msg" );

CustomDialogMsgTwoBtn.getInstance().show();

09-16 08:41:42.934:I / InputDispatcher(286):应用程序没有响应:AppWindowToken {41c8f4f8 token = Token {41c05558 ActivityRecord {4205b5a0 u0 com.templatea / com.templatea.MainActivity}}} - Window {41995bf0 u0 com.example.esf_templatea / com.templatea.MainActivity} . 自事件发生以来已经达到5008.4ms,等待起5006.8ms . 原因:等待,因为焦点窗口尚未完成处理先前传递给它的输入事件 . 09-16 08:41:42.934:I / WindowManager(286):输入事件调度超时发送到com.example / com.templatea.MainActivity 09-16 08:41:43.184:I / Process(286):发送信号 . PID:7296 SIG:3 09-16 08:41:43.194:I / dalvikvm(7296):threadid = 3:对信号作出反应3 09-16 08:41:43.255:I / dalvikvm(7296):写入堆栈跟踪到'/ data / anr / traces.txt'09-16 08:41:43.255:I / Process(286):发送信号 . PID:286 SIG:3 09-16 08:41:43.255:I / dalvikvm(286):threadid = 3:对信号做出反应3 09-16 08:41:43.745:I / dalvikvm(286):写入堆栈跟踪到'/data/anr/traces.txt'09-16 08:41:43.745:I / Process(286):发送信号 . PID:404 SIG:3 09-16 08:41:43.745:I / dalvikvm(404):threadid = 3:对信号做出反应3 09-16 08:41:43.854:I / dalvikvm(404):写入堆栈跟踪到'/data/anr/traces.txt'09-16 08:41:43.864:I / Process(286):发送信号 . PID:446 SIG:3 09-16 08:41:43.864:I / dalvikvm(446):threadid = 3:对信号作出反应3 09-16 08:41:43.985:I / dalvikvm(446):写入堆栈跟踪'/data/anr/traces.txt'09-16 08:41:44.645:D / dalvikvm(286):GC_EXPLICIT释放3213K,50%免费6742K / 13296K,暂停4ms 10ms,总计113ms 09-16 08:41: 45.234:E / ActivityManager(286):com.emplatea中的ANR(com.templatea / com.templatea.MainActivity)09-16 08:41:45.234:E / ActivityManager(286):原因:keyDispatchingTimedOut 09-16 08:41 :45.234:E / ActivityManager(286):加载:0.2 / 0.15 / 0.09 09-16 08:41:45.234:E / ActivityManager(286):CPU使用率从17189ms到0ms前:09-16 08:41:45.234: E / ActivityManager(286):1.1%46 / adbd:0.2%用户0.8%内核/故障:180次09-16 08:41:45.234:E / ActivityManager(286):1.1%286 / system_server:0.9%用户0.1 %kernel / faults:67 minor 09-16 08:41:45.234:E / ActivityManager(286):0%404 / com.android.systemui:0%user 0%kernel 09-16 08:41:45.234:E / ActivityManager(286):0%446 / com.android.phone:0% user 0% kernel 09-16 08:41:45.234:E / ActivityManager(286):4.9%TOTAL:2.1%用户2.6%内核0.1%softirq 09-16 08:41:45.234:E / ActivityManager(286):CPU使用率1502ms到2050ms之后:09-16 08:41:45.234:E / ActivityManager(286):5.5%286 / system_server:3.7%用户1.8%内核/故障:2次要09-16 08:41:45.234:E / ActivityManager( 286):9.2%303 / ActivityManager:5.5%用户3.7%内核09-16 08:41:45.234:E / ActivityManager(286):7.2%TOTAL:7.2%用户0%内核09-16 08:41:45.375: D / dalvikvm(286):GC_FOR_ALLOC释放1595K,57%免费5837K / 13296K,暂停75ms,总计76ms 09-16 08:41:45.505:D / dalvikvm(286):GC_FOR_ALLOC释放1034K,59%免费5464K / 13296K,暂停72毫秒,总计73毫秒09-16 08:41:45.515:我/编舞(286):跳过66帧!应用程序可能在其主线程上做了太多工作 .

我的问题是,使用以单例模式实现的模态对话框,这对我来说非常有效 . 它会暂停Activity上的指令指针并继续在Handlter线程下显示Dialog(你可以在singleton类中看到这个) . 但我不知道为什么当我按下“后退按钮”它会崩溃我的应用程序并冻结它 . 希望有人可以帮助我 . :(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值