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