A. android开发等待一段时间后执行下一条语句,但是thread.sleep(30000)之后线程就挂起了
android的开发思路中,基本上都是由子线程去执行任务的,然后执行完了之后发回message再由handler去处理。这样才不会影响程序连贯性的操作。
你这个需要sleep之后再执行的语句,就放到子线程中去。
B. 安卓线程handler.post传送消息有延时,怎么办
延迟是跟网络有关系的,HANDLER.POST没有大多关联。我用的时候也出现同样的问题 换网络就原满解决了,请采纳
C. 如何延迟android的某段代码执行时间
要起到延时的作用需要使用Handler。
举例说明:
java">{
;
privateHandlermHander=newHandler();
privatebooleanmActive=false;
privatebooleanmSwap=true;
privatefinalRunnablemRunnable=newRunnable(){
publicvoidrun(){
if(mActive){
if(mSwap){
mLinearLayout.setBackgroundColor(Color.WHITE);
mSwap=false;
mHander.postDelayed(mRunnable,20);
}else{
mLinearLayout.setBackgroundColor(Color.BLACK);
mSwap=true;
mHander.postDelayed(mRunnable,100);
}
}
}
};
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mLinearLayout=(LinearLayout)findViewById(R.id.strobe);
startStrobe();
}
privatevoidstartStrobe(){
mActive=true;
mHander.post(mRunnable);
}
}
代码的意思是:程序创建一个闪光点效果,延时显示:一个是100 ms,其它是20ms。
关于Handler
Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分在消息队列中逐一将消息取出,然后对消息进行处理,也就是发送消息和接收消息不是同步的处理。 这种机制通常用来处理相对耗时比较长的操作。
D. android 怎么样在listview的adapter.notifyDataSetChanged 结束后执行一些操作
恩,原理是这样的,notifyDataSetChanged()其实是异步的,因为设计的时候如果同步的话如果数据量大或者有耗时操作主线程会出现ANR。可惜的是notifyDataSetChanged并没有监听,所以你不知道是否执行完了。我的解决方式是使用postdelay来延迟主线程的执行,达到假同步的效果。
E. Android dialog能设置延迟或者倒计时吗
//可以设置延迟启动Dialog,以后用Handler设置延迟
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
new Dialog(context).show();
}
},delaytime);
delaytime//延迟时间
F. 安卓线程handler.post传送消息有延时,怎么办
延迟是跟网络有关系的,
HANDLER.POST没有大多关联。
我用的时候也出现同样的问题
换网络就原满解决了
G. android在主线程中使用handle.postdelay做延时操作对主线程资源消耗大吗
android在主线程中使用handle.postdelay做延时操作对主线程资源消耗不大,因为handler中有一个消息池,是静态的消息池, 建议去了解一下Android中的Handler, Looper, MessageQueue之间的关系就知道了.
H. android 开发中如何实现让程序执行一条语句后延时一段时间后再执行下面的语句
你这方法完全是利用了单片机处理速度慢才会有伪延时效果,实际上那时机器正在运算,放在好点的机器上运算速度快了当然就没延时效果了。正统的延时还是要用到楼上说的线程,安卓还有一个timer类也可以用于定时。
I. android 开发中如何实现让程序执行一条语句后延时一段时间后再执行下面的语句
延时操作,可以用下列方案:
方案1:线程阻断
try {
Thread.currentThread().sleep(2000);//阻断2秒
} catch (InterruptedException e) {
e.printStackTrace();
}
方案2:使用Handler的postDelayed延迟操作。
mHandler .postDelayed(mRunnable, 3000); // 在Handler中执行子线程并延迟3s。
private Runnable mRunnable = new Runnable() {
@Override
public void run() {
mHandler.sendEmptyMessage(1);
}
};
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//3s后执行代码
}
}。
J. android中开线程延时问题
我想做到的效果是屏幕中画一个圆,然后圆会慢慢变小,当半径变成1时停止变小。然后每触摸一次屏幕圆半径会增大,直到半径到100停止。我把这两个写在了两个线程里,但是目前运行下来触摸屏放大圆可以,但是圆自己慢慢变小却不行。
MainActivity.java 重要 代码
public class MainActivity extends Activity{
private Thread thread1;
private Thread thread2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final FrameLayout frame=new FrameLayout(this);
setContentView(frame);
frame.findViewById(R.id.framelayout1);
final MyView view=new MyView(this);
thread1=new Thread(new Runnable(){
@Override
public void run(){
view.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v,MotionEvent event){
++view.r;
view.invalidate();
return true;
}
});
}
});
thread2=new Thread(new Runnable(){
@Override
public void run(){
--view.r;
view.invalidate();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
thread1.start();
thread2.start();
frame.addView(view);
if (view.r==1)
{
thread2.interrupt();
}
if (view.r==100){
thread1.interrupt();
}
}
}
class MyView extends View{
int r=10,x,y;
public MyView(Context context){
super(context);
x=context.getResources().getDisplayMetrics().widthPixels/2;
y=context.getResources().getDisplayMetrics().heightPixels/2;
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
Paint paint=new Paint();
paint.setAntiAlias(true);
paint.setStrokeWidth(3);
paint.setStyle(Style.STROKE);
paint.setColor(Color.BLUE);
canvas.drawCircle(x,y,r,paint);
}
}