导航:首页 > 操作系统 > android对话框阻塞

android对话框阻塞

发布时间:2023-04-09 12:27:38

android surfaceview 会不会阻塞ui线程

系统不会为每个组件单独创建线程,在同一个进程里的UI组件都会在UI线程里实例咐侍化,系统对每一个组件的调用卖橘都从UI线程分发出去。
结果就是,响应系统回调的方法(比如响应用户动作的onKeyDown()和各种生命周期回调)永远都是在UI线程里运行。

当App做一些比较重(intensive)的工作的时候,除非你合理地实现,否则单线程模型的performance会很poor。
特别的是,如果所有的工作都在UI线程,做一些比较耗时的工作比如访问网络或者数据库查询,都会阻塞UI线程,导致事件停止分发(包括绘制事件)。对于用户来说,应用看起来像是卡住了,更坏的情况是,如果UI线程blocked的时间太长(大约超过5秒),用户就会看到ANR(application not responding)的对话框。
另外,Andoid UI toolkit并不是线程安全的,所衡配吵以你不能从非UI线程来操纵UI组件。你必须把所有的UI操作放在UI线程里,所以Android的单线程模型有两条原则:
1.不要阻塞UI线程。
2.不要在UI线程之外访问Android UI toolkit(主要是这两个包中的组件:android.widget andandroid.view)。

Ⅱ Android如何避免ANR

ANR:Application Not Responding,五秒在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列情况时,Android就会显示ANR对话框了: 对输入事件(如按键、触摸屏事件)的响应超过5秒 意向接受器(intentReceiver)超过10秒钟仍未执行完毕
Android应用程序完全运行在一个独立的线程中(例如main)。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发ANR。因为此时,你的应用程序已经没有机会去响应输入事件和意向广播(Intent broadcast)。 因此,任何运行在主线程中的方法,都要尽可能的只做少量的工作。特别是活动生命周期中的重要方法如onCreate()和 onResume()等更应如此。潜在的比较耗时的操作,如访问网络和数据库;或者是开销很大的计算,比如改变位图的大小,需要在一个单独的子线程中完成(或者是使用异步请求,如数据库操作)。但这并不意味着你的主线程需要进入阻塞状态已等待子线程结束 -- 也不需要调用Therad.wait()或者Thread.sleep()方法。取而代之的是,主线程为子线程提供一个句柄(Handler),让子线程在即将结束的时候调用它(xing:可以参看Snake的例子,这种方法与以前我们所接触的有所不同)。使用这种方法涉及你的应用程序,能够保证你的程序对输入保持良好的响应,从而避免因为输入事件超过5秒钟不被处理而产生的ANR。这种实践需要应用到所有显示用户界面的线程,因为他们都面临着同样的超时问题。

Ⅲ android中Dialog和PopupWindow的区别

Android中的对话框有两种:PopupWindow和AlertDialog。它们都可以实现弹窗功能,但是他们之间有一些差别,下面总结了一点。 (1)Popupwindow在显示之前一定要设置宽高,Dialog无此限制。 (2)Popupwindow默认不会响应物理键盘的back,除非显示设置了popup.setFocusable(true);而在点击back的时候,Dialog会消失。 (3)Popupwindow不会给页面其他的部分添加蒙层,而Dialog会。 (4)Popupwindow没有标题,Dialog默认有标题,可以通过dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);取消标题 (5)二者显示的时候都要设置Gravity。如果不设置,Dialog默认是Gravity.CENTER。 (6)二者都有默认的背景,都可以通过setBackgroundDrawable(new ColorDrawable(android.R.color.transparent));去掉。 其中最本质的差别就是:AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情;而PopupWindow是阻塞式对话框:PopupWindow弹出时,程序会等待,在PopupWindow退出前,程序一直等待,只有当我们调用了dismiss方法的后,PopupWindow退出,程序才会向下执行。这两种区别的表现是:AlertDialog弹出时,背景是黑色的,但是当我们点击背景,AlertDialog会消失,证明程序不仅响应AlertDialog的操作,还响应其他操作,其他程序没有被阻塞,这说明了AlertDialog是非阻塞式对话框;PopupWindow弹出时,背景没有什么变化,但是当我们点击背景的时候,程序没有响应,只允许我们操作PopupWindow,其他操作被阻塞。 我们在写程序的过程中可以根据自己的需要选择使用Popupwindow或者是Dialog。

Ⅳ android 弹出输入框并得到输入框的结果

不用找了,这才是正解。你的需求其实是,需要一个阻塞式对话框,安颂旁滚卓启备本身所有弹窗都是非阻塞的。

import android.app.Activity;

import android.app.AlertDialog;

import android.content.DialogInterface;

import android.os.Handler;

import android.os.Looper;

import android.os.Message;

import android.widget.EditText;

/**

* 动态获取用户输入后在继续野余后面的流程

* 这是一个模态阻塞对话框(阻塞主线程,结果不用回调来处理)

*/

public class BlockingInputDialog {

String mInputString = "";

Activity mContext;

String mTitle;

EditText mEditText;

Handler mHandler;

public BlockingInputDialog(Activity context, String title){

mContext = context;

mTitle = title;

}

public String showDialog(){

mHandler = new Handler(){

@Override

public void handleMessage(Message msg) {

//super.handleMessage(msg);

throw new RuntimeException();

}

};

AlertDialog.Builder builder = new AlertDialog.Builder(mContext);

builder.setTitle(mTitle);

builder.setCancelable(false);

mEditText = new EditText(mContext);

builder.setView(mEditText);

builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialogInterface, int i) {

mInputString = mEditText.getText().toString();

Message message = mHandler.obtainMessage();

mHandler.sendMessage(message);

}

});

builder.setNegativeButton("取消", null);

builder.create().show();

try {

Looper.getMainLooper().loop();

}

catch(RuntimeException e2)

{

}

return mInputString;

}

}

Ⅳ Android中Popupwindow和Dialog的区别

除了外观样式和显示的位置的区别之外,他们之间最本质的区别是:
dialog是非阻塞式对话框,popupwindow是阻塞式对话框。也就是说dialog弹出时
后台还可以进行很多的操作,而popupwindow弹出是
后台进程是阻塞的,要一直等待popupwindow
消失
才会进行操作。

Ⅵ android中如何实现弹出一个阻塞线程的对话框

Android里面的这个阻塞和以前我们在C++里面的理解有点不一样.
C++里面的阻塞就是整个程序都停在那了,不辩李往下走.
但是在Android里面,它只是把窗口困闷弹出来携尺迟,放到最上面.但是程序还是会继续往下走的.....

Ⅶ Android为什么UI线程阻塞 5s 以上 不出现ANR

因为有些模滚手机有设置
如三敬册星的手亮码宏机->设定->开发者选项->显示全部ANR.

Ⅷ TCL智能电视弹出对话框抱歉"android.process.acore"已停止运行怎么解决

android.process.acore是安卓智能电视的基础应用,出现该提示一般是因为该没颤应用没有启动或者意外关闭,导致所有依赖该应用的其他功能都无法使用,电视机就会一直出现“android.process.acore已停止运行”的提示信息。解决方法如下:x0dx0a1、一般先将电视机重启,如果能够进入电视机的系统界面,可以打开系统设置,执行系统还原或系统升级,把电视机的系统恢复为出厂设置状态或者桐拦升级到最新版本。x0dx0a2、如果重枯轮败启多次仍无法进入系统,则只能联系电视机的售后服务告知故障表现,由其安排专业人员上门为用户检测并刷入新系统。x0dx0a3、如果检测出是硬件出现故障导致该问题的,也需要联系售后服务对电视机进行检修才能解决。

Ⅸ 如何阻止android 系统对话框弹出

android 弹出对话框后要实现不能回退 ,可以重写在这个activity中的 back键的事件处理,让back不响应。
public boolean dispatchKeyEvent(android.view.KeyEvent event) {
switch(event.getKeyCode())
{
case KeyEvent.KEYCODE_BACK:
{
return false;
}
}
return true;
};
这样点击返回键就实现了禁止回退。

Ⅹ android 如何让整个界面灰掉不可用

弹出一个自定义对话框让原来的那个Activity进入阻塞状态就可以

阅读全文

与android对话框阻塞相关的资料

热点内容
如何查看电脑系统服务器ip地址查询 浏览:389
把文件夹设锁 浏览:570
命令行语句 浏览:218
企友3e财务如何连接服务器 浏览:984
华为手机如何删除卸载app残留数据 浏览:543
rpm的命令作用 浏览:365
如何查看网站的服务器时间 浏览:850
编译局和人民出版社 浏览:652
java泛型extends 浏览:326
头条程序员教学 浏览:772
安卓合并什么意思 浏览:530
linux在光盘引导 浏览:537
imap服务器地址怎么查 浏览:654
作曲教程pdf 浏览:506
pr怎么压缩文件大小 浏览:863
查看oracle字符集命令 浏览:179
锂电池增加密度 浏览:661
linux用户密码忘记 浏览:242
gb压缩天然气 浏览:635
图片拼接不压缩app 浏览:670