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