Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在用户响应之前停止线程_Android_Multithreading - Fatal编程技术网

Android 如何在用户响应之前停止线程

Android 如何在用户响应之前停止线程,android,multithreading,Android,Multithreading,我对安卓系统相当陌生,我想知道如何让安卓系统中的线程停止,直到它得到用户的响应。我审理了以下案件: 数到2000年 一旦点击1000,对话框就会打开 计数器“应”停止,直到用户在对话框中按OK 用户按下OK后,计数器应从1000继续到2000 在我下面的代码中实际发生的是,计数器一旦达到1000,对话框就会打开,但计数器会一直持续到2000,并且不会在1000停止并等待 为什么会这样?有什么想法吗?例子 代码: public void onClick(视图arg0) { 最终可运行r= 新的Ru

我对安卓系统相当陌生,我想知道如何让安卓系统中的线程停止,直到它得到用户的响应。我审理了以下案件:

数到2000年

一旦点击1000,对话框就会打开

计数器“应”停止,直到用户在对话框中按OK

用户按下OK后,计数器应从1000继续到2000

在我下面的代码中实际发生的是,计数器一旦达到1000,对话框就会打开,但计数器会一直持续到2000,并且不会在1000停止并等待

为什么会这样?有什么想法吗?例子

代码:

public void onClick(视图arg0)
{
最终可运行r=
新的Runnable()
{
公开募捐
{
对于(int i=0;i<2000;i++)
{
系统输出打印LN(i);
如果(i==1000)
{
final AlertDialog.Builder alert=新建AlertDialog.Builder(TmptestActivity.this);
最终编辑文本输入=新编辑文本(TmptestActivity.this);
alert.setView(输入);
alert.setPositiveButton(“确定”,新的DialogInterface.OnClickListener(){
public void onClick(对话框接口对话框,int whichButton)
{
字符串$input=input.getText().toString();
System.out.println($input);
通知();
}});
alert.show();
}

我认为发生这种情况是因为您的警报对话框在UI线程中运行,因此您的新线程会继续更新计数器,因为您的警报在另一个线程中。您应该尝试使用锁(但我不太熟悉)。也许可以帮到您。

onClick()在UI线程上执行,阻止它是个坏主意(不要在家里这样做!)如果你想让你的UI对话框延迟一段时间,你应该:

  • 产生另一个线程
  • 使用sleep()等待(不在循环中计数)
  • 使用runOnUiThread()弹出对话框
(也可以使用异步任务:)


对于启动和停止线程,您可以在某个共享对象上使用wait()/notify(),这是什么意思?我对这个网站相当陌生,这意味着您应该接受这个问题的答案给人们打分有一个“记号”在每个答案左侧的否决票下方打上标记。选择最佳答案并勾选该标记。这样你就可以帮助其他人tooThanks Konstantin!我如何使用异步任务来完成此任务?我需要UI线程等待异步任务完成?我试着使用thred wait()但它只是挂起等待。。。。
public void onClick(View arg0)
{
     final Runnable r =  

              new Runnable()
              {

                     public void run()
                     {
                        for (int i = 0 ; i < 2000 ; i++)
                        {
                            System.out.println(i);
                            if(i == 1000)
                            {

                                final AlertDialog.Builder alert = new AlertDialog.Builder(TmptestActivity.this);
                                final EditText input = new EditText(TmptestActivity.this);
                                alert.setView(input);
                                alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int whichButton)
                                {
                                     String $input = input.getText().toString();
                                     System.out.println($input);
                                     notify();

                                }});

                                alert.show();
                            }