[英]How to execute a task after a certain time period in Android?
我創建了一個包含大量片段的應用程序。 在我的最后一個片段中,我嘗試在10秒后在LogCat
上打印一些東西。 但它對我不起作用。
這是我的Fragment
類
public class StepTwentyTwoFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.step22_fragment, container, false);
testMethod();
return v;
}
public static StepTwentyTwoFragment newInstance() {
StepTwentyTwoFragment f = new StepTwentyTwoFragment();
Bundle b = new Bundle();
f.setArguments(b);
return f;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser) {
Activity a = getActivity();
if(a != null) a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
public void testMethod(){
SystemClock.sleep(10000);
Log.d("PPP : ","456");
}
}
實際上我想在最后一個片段啟動10秒后打印這個“PPP”。 但它開始在應用程序中加載一些片段進行打印。
有什么想法嗎?
謝謝。
您不應該睡覺,也不應該在不需要它們時創建線程。 Android的主要線程是基於事件循環的,您可以安排事件/代碼在將來的某個時間點執行。
您最簡單的選擇是使用
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.step22_fragment, container, false);
Runnable delayedTask = new Runnable() {
@Override
public void run() {
Log.d("PPP : ","456");
}
};
v.postDelayed(delayedTask, 10000);
return v;
}
如果您沒有View
您也可以創建自己的處理程序。
private static final Handler mainThreadHandler = new Handler(Looper.getMainLooper());
public void testMethod(){
Runnable delayedTask = new Runnable() {
@Override
public void run() {
Log.d("PPP : ","456");
}
};
mainThreadHandler.postDelayed(delayedTask, 10000);
}
使用Handler.postDelayed方法來實現此目的。
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 10000ms
}
}, 10000);
將您要執行的代碼放在run()方法中。從這里了解有關處理程序的更多信息
可能你正在睡覺ui線程,這就是睡眠結束后你的日志出現的原因。
使用Timer和TimerTask。 TimerTask在與ui線程不同的線程上運行。
Timer timer = new Timer();
TimerTask timer_task = new TimerTask() {
@Override
public void run() {
Log.d("PPP : ","456");
}
};
timer.schedule(timer_task, 10000);
嘗試這個
public void executePeriodicTask() {
final Handler handler = new Handler();
Timer timer = new Timer();
TimerTask doAsynchronousTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
try {
//Write your code here , which you want to execute periodically
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
}
};
timer.schedule(doAsynchronousTask, 0, 50000); //execute in every 50000 ms
}
您可以簡單地為此創建一個線程或處理程序。
如果你想使用Thread - >
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {}
((Activity)getActivity()).runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d("PPP : ","456");
// Do other Stuff
}
});
}
}).start();
你可以使用Handler
和PostDelayed
傳遞Runnable
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
Log.d("PPP : ","456");
}
}, 10000);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.