Android 固定Can';t在未调用Looper.prepare()的线程内创建处理程序
编辑: 我是在我线程中的stack overflow朋友的帮助下这样做的,在android中显示对话框中的视频视图,但它冻结了我的应用程序,提前向我表示感谢 这是我在线程中的活动:Android 固定Can';t在未调用Looper.prepare()的线程内创建处理程序,android,multithreading,Android,Multithreading,编辑: 我是在我线程中的stack overflow朋友的帮助下这样做的,在android中显示对话框中的视频视图,但它冻结了我的应用程序,提前向我表示感谢 这是我在线程中的活动: Auto_Bucket_Tests_Thread = new Thread(new Runnable() { @SuppressWarnings("deprecation") @Override public void run
Auto_Bucket_Tests_Thread = new Thread(new Runnable()
{
@SuppressWarnings("deprecation")
@Override
public void run() {
while(Test_Completed==false)
{
if(Login.Bucket_Status==true && Video_Status==false)
{
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Bucket_Open_Error();
}
});
}
else if(Login.Bucket_Status==false && Video_Status==true)
{
videodialog.cancel();
}
}
Auto_Bucket_Tests_Thread.stop();
}
});
}
protected void Bucket_Open_Error() {
videodialog = new Dialog(this);
videodialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
videodialog.setContentView(R.layout.videodialog);
videodialog.show();
WindowManager.LayoutParams layout_params =new WindowManager.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
layout_params.copyFrom(videodialog.getWindow().getAttributes());
layout_params.dimAmount=0;
videodialog.getWindow().setAttributes(layout_params);
final VideoView video = (VideoView)videodialog.findViewById(R.id.videoView_dialog);
Uri uri = Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.doorsclosing);
video.setVideoURI(uri);
video.start();
video.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
Video_Status=true;
video.start();
//app_message.show();
}
});
您正在尝试从后台线程创建处理程序。如果你不希望处理程序与UI线程通信,那么创建一个不同的线程而不是处理程序。如果您希望处理程序与UI线程通信,则需要向构造函数传递一个循环器 新处理程序(Looper.getMainLooper()) 编辑:替换 runOnUiThread 与 新处理程序(Looper.getMainLooper()).post
runOnUiThread是一种活动方法,它创建一个处理程序并在UI线程中发布Runnable,但由于您在后台线程上运行(创建了新线程并运行了它),您不能像这样发布到UI,因为新处理程序与UI没有连接(因此didint调用Looper prepare execption).很抱歉,我没有收到回音,你能不能请你再告诉我一次怎么做,因为我是@EE66Dude的新手,我确实喜欢你说的,但它冻结了应用程序请帮助我,我在@ee66上面发布了我的代码,请随时更改为If。你已经打开了多个视频。这就是为什么你坚持你的UI线程我的坏。不要删除while,只要更改test completeK dude的值,我用你的答案解决了它,我没有更改while的值,谢谢你的帮助dude@EE66