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

时间:2012-02-02 08:06:25

标签: android multithreading

我对android很新,我想知道如何在Android中获取一个线程,直到它得到用户的响应。我尝试了以下案例:

直到2000年

一旦达到1000,对话框应该打开

计数器“应该”停止,直到用户在对话框中按“确定”。

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

我的代码实际发生的是,计数器在点击1000时开始,对话框打开但计数器继续直到2000,并且没有停止并等待1000。

为什么会这样?有任何想法吗?实例

CODE:

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();
                            }

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

onClick()在UI线程上执行,阻止它是不明智的(不要在家里这样做!)。如果您希望将UI对话框推迟一段时间,您应该这样做:

  • 产生另一个线程
  • 使用sleep()等待(不计入循环)
  • 使用runOnUiThread()
  • 弹出对话框

(或者您可以使用异步任务:http://developer.android.com/reference/android/os/AsyncTask.html

对于启动和停止线程,您可以在某些共享对象上使用wait()/ notify()