如何在Android中使用wait()和notify()

时间:2014-11-07 14:23:17

标签: android multithreading alertdialog ui-thread

我正在尝试打开AlertDialog。打开此AlertDialog时,线程需要等待用户输入才能继续其程序。我读到我需要锁定需要等待和通知的对象。当我在手机上运行此代码时。 alertdialog不会显示,看起来应用程序正在循环,因为几秒钟后我收到一条消息,表明应用程序没有响应。下面你会发现我写的代码..顺便说一下。我是android编程的处女。所以请温柔:P

public class EditTagActivity extends Activity{  

AlertDialog alertDialog;

Runnable h = new Runnable()
{
    @ Override
    public void run() 
    {
        alertDialog.show();
        synchronized(g)
        {
            try 
            {
                Log.d("Threads", "g.wait()");
                g.wait();
            } 
            catch (InterruptedException e) 
            {
                e.printStackTrace();
            }
        }           
    }
};

Runnable g = new Runnable() 
{
    @Override
    public void run() 
    {
        Log.d("Threads", "createAlertDialog()");
        createAlertDialog();
        runOnUiThread(h);
    }
};
public AlertDialog alert;
Runnable test = new dialogManager();
@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_edit_tag);
    Log.d("Threads", "setup()");
    setup();
}

void setup() 
{
    Log.d("Threads", "g.run()");
    g.run();
}

void createAlertDialog() 
{
    Builder alert = new AlertDialog.Builder(this);
    alert.setTitle("Alert");
    alert.setMessage("Flaq");
    alert.setPositiveButton("OK", new DialogInterface.OnClickListener() 
    {
        public void onClick(DialogInterface dialog, int which) 
        {
            synchronized(g)
            {
                Log.d("Threads", "g.notifyAll");    
                g.notifyAll();
            }
        }
    });
    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() 
    {
        public void onClick(DialogInterface dialog, int which) 
        {
            synchronized(g)
            {
                Log.d("Threads", "g.notifyAll");
                g.notifyAll();
            }
        }
    });
    alertDialog = alert.create();
}

}

1 个答案:

答案 0 :(得分:1)

而不是Java的ThreadRunnable方法,您应该使用Android的AsyncTask,它可以帮助您更简单地通过重写onPreExecute和onPostExecute方法来处理前后的事情在后台运行代码。

This post有一个使用AsyncTask类的好例子。