Android 主线程中如何暂停

时间:2022-12-16 18:31:42
主要的想法是在弹出对话框时让用户选择确定还是取消(这个对话框我设计的是10秒时间用户没有响应就自动关闭)

如下面的例子

public void read()

System.out.println("A");
showDialog();
System.out.println("B");
System.out.println("C");



public void showDialog()
{
这里是一个Dialog,有确认和取消的按钮。

}



我现在是做法的 在showDialog()内开线程,
Thread thread = new Thread(runnable);
thread.start();

在runnable我使用了
for (int i = 9; i >= 0; i--)
{
Thread.sleep(1000);
System.out.println("D");
}


发现
打印的结果是
A
D
B
C
D
D
D
D
..
..


我想要的结果是
A
D
D
D
..
..
B
C

谁能告诉我怎么做,本人新手中的新手,望大家指点!

11 个解决方案

#1


主线程暂停不了呀,主线程暂停了那还不报ANR错误呀

#2


假如说
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText1.setText("AAAAAAAAAAAAAAA");
editText2.setText("BBBBBBBBBBBBBBB");
button1.setOnClickListener(onClickListener);
button2.setOnClickListener(onClickListener);
editText3.setText("CCCCCCCCCCCCCCC");
System.out.println("----------------END---------------");
}

我怎么样才能先等button处理完事件后再去执行editText3.setText("CCCCCCCCCCCCCCC");

#3


用object.wait(10000)

#4


假如说
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText1.setText("AAAAAAAAAAAAAAA");
editText2.setText("BBBBBBBBBBBBBBB");
button1.setOnClickListener(onClickListener);
button2.setOnClickListener(onClickListener);
editText3.setText("CCCCCCCCCCCCCCC");
System.out.println("----------------END---------------");
}

我怎么样才能先等button处理完事件后再去执行editText3.setText("CCCCCCCCCCCCCCC");

这个也可以用handler来处理,在handler的handleMessage中editText3.setText("CCCCCCCCCCCCCCC");

#5


那就在click中添加处理时间吗,主线程不能停

#6


在click中添加事件也满足不了我的需求。
我是在BroadcastReceiver中想处理一些事件
BroadcastReceive中的onReceive就是没有相关处理,就是默认的处理了
而我想先让用户先选择,然后再处理
我在onReceive先弹出对话框,然后再接着往下走。

3楼的大侠说wait,这个确实是做到了,但是不显示UI了,就是用户看不到界面,无法选择。
还有什么好的办法吗?

#7


BroadcastReceive起个Activity, 然后show dialog, 并且创建个handler,post个消息10秒钟后finish。在dialog的button里你可以关闭这个Activity,取消那个给handler的消息。。。等等,爱干嘛干嘛。

这里没有线程什么事,别瞎用。

#8


引用 7 楼  的回复:
BroadcastReceive起个Activity, 然后show dialog, 并且创建个handler,post个消息10秒钟后finish。在dialog的button里你可以关闭这个Activity,取消那个给handler的消息。。。等等,爱干嘛干嘛。

这里没有线程什么事,别瞎用。



能稍微详细点吗?
是用
Handler mHandler=new Handler(); 
mHandler.post(new Runnable(){ 
@Override 
public void run() { 
// TODO Auto-generated method stub 

});
这个吗?

#9


每个线程是单独运行的。

#10


    public final boolean postDelayed(Runnable r, long delayMillis)
    {
        return sendMessageDelayed(getPostMessage(r), delayMillis);
    }

Handler.java: postDelayed或者sendMessageDelayed都可以,看你自己。你也可以查找sendMessageDelayed别的地方的用法,以作参考: 比如ViewFlipper.java里有。

#11


请问楼主,问题解决了吗?

#1


主线程暂停不了呀,主线程暂停了那还不报ANR错误呀

#2


假如说
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText1.setText("AAAAAAAAAAAAAAA");
editText2.setText("BBBBBBBBBBBBBBB");
button1.setOnClickListener(onClickListener);
button2.setOnClickListener(onClickListener);
editText3.setText("CCCCCCCCCCCCCCC");
System.out.println("----------------END---------------");
}

我怎么样才能先等button处理完事件后再去执行editText3.setText("CCCCCCCCCCCCCCC");

#3


用object.wait(10000)

#4


假如说
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText1.setText("AAAAAAAAAAAAAAA");
editText2.setText("BBBBBBBBBBBBBBB");
button1.setOnClickListener(onClickListener);
button2.setOnClickListener(onClickListener);
editText3.setText("CCCCCCCCCCCCCCC");
System.out.println("----------------END---------------");
}

我怎么样才能先等button处理完事件后再去执行editText3.setText("CCCCCCCCCCCCCCC");

这个也可以用handler来处理,在handler的handleMessage中editText3.setText("CCCCCCCCCCCCCCC");

#5


那就在click中添加处理时间吗,主线程不能停

#6


在click中添加事件也满足不了我的需求。
我是在BroadcastReceiver中想处理一些事件
BroadcastReceive中的onReceive就是没有相关处理,就是默认的处理了
而我想先让用户先选择,然后再处理
我在onReceive先弹出对话框,然后再接着往下走。

3楼的大侠说wait,这个确实是做到了,但是不显示UI了,就是用户看不到界面,无法选择。
还有什么好的办法吗?

#7


BroadcastReceive起个Activity, 然后show dialog, 并且创建个handler,post个消息10秒钟后finish。在dialog的button里你可以关闭这个Activity,取消那个给handler的消息。。。等等,爱干嘛干嘛。

这里没有线程什么事,别瞎用。

#8


引用 7 楼  的回复:
BroadcastReceive起个Activity, 然后show dialog, 并且创建个handler,post个消息10秒钟后finish。在dialog的button里你可以关闭这个Activity,取消那个给handler的消息。。。等等,爱干嘛干嘛。

这里没有线程什么事,别瞎用。



能稍微详细点吗?
是用
Handler mHandler=new Handler(); 
mHandler.post(new Runnable(){ 
@Override 
public void run() { 
// TODO Auto-generated method stub 

});
这个吗?

#9


每个线程是单独运行的。

#10


    public final boolean postDelayed(Runnable r, long delayMillis)
    {
        return sendMessageDelayed(getPostMessage(r), delayMillis);
    }

Handler.java: postDelayed或者sendMessageDelayed都可以,看你自己。你也可以查找sendMessageDelayed别的地方的用法,以作参考: 比如ViewFlipper.java里有。

#11


请问楼主,问题解决了吗?