Jui*_*iCe 10 android timedelay
我想让我的程序暂停一定的毫秒数,我到底该怎么做?
我发现了不同的方式Thread.sleep( time ),但我认为这不是我需要的.我只想让我的代码在某一行停顿x毫秒.任何想法将不胜感激.
这是C中的原始代码......
extern void delay(UInt32 wait){
UInt32 ticks;
UInt32 pause;
ticks = TimGetTicks();
//use = ticks + (wait/4);
pause = ticks + (wait);
while(ticks < pause)
ticks = TimGetTicks();
}
Run Code Online (Sandbox Code Playgroud)
等待是一个毫秒
Foa*_*Guy 17
你真的不应该像这样睡眠UI线程,如果你这样做,你可能会让你的应用程序强制关闭ActivityNotResponding异常.
如果你想延迟一些代码运行一段时间,请使用Runnable和Handler,如下所示:
Runnable r = new Runnable() {
@Override
public void run(){
doSomething(); //<-- put your code in here.
}
};
Handler h = new Handler();
h.postDelayed(r, 1000); // <-- the "1000" is the delay time in miliseconds.
Run Code Online (Sandbox Code Playgroud)
这样你的代码仍然会被延迟,但你并没有"冻结"UI线程,这会导致最好的性能不佳,并且ANR强制关闭最坏.
好的,首先,在你做的时候,永远不要用繁忙的循环实现延迟.我可以看到它的来源 - 我猜测掌上飞行器是一个没有内置sleep()功能的单进程设备,但是在多进程设备上,像这样的繁忙循环只会带来整个处理器跪了下来.它可以杀死您的电池,防止正常的系统任务正常运行,减慢其他程序的速度或完全停止它们,使设备无响应,甚至可能导致它变热.
你正在寻找的电话是Thread.sleep().您需要设置以捕获在睡眠时发生的任何中断异常.
其次,使用基于事件的用户界面(如Android(或几乎任何现代GUI系统)),您永远不会想要在UI线程中睡觉.这也将冻结整个设备并导致ANR(活动无响应)崩溃,正如其他海报所提到的那样.最重要的是,那些小冻结完全破坏了用户体验.
(例外:如果你的睡眠时间间隔很短,用户可能不会注意到,你就可以侥幸逃脱.1/4秒可能没问题,虽然它可以使应用程序变得笨拙,具体取决于具体情况.)
不幸的是,如果你正在做的是将基于循环的应用程序移植到基于事件的系统,那么就没有干净而优雅的方法来做你想做的事情.
也就是说,正确的过程是在UI线程中创建一个处理程序并向其发送延迟消息.延迟的消息将"唤醒"您的应用程序并触发它以执行延迟后要执行的任何操作.
像这样的东西:
View gameBoard; // the view containing the main part of the game
int gameState = 0; // starting
Handler myHandler;
public void onCreate(Bundle oldState) {
super.onCreate(oldState);
...
gameBoard = findViewById(R.layout.gameboard);
myHandler = new Handler();
...
}
public void onResume() {
super.onResume();
displayStartingScreen();
myHandler.postDelayed(new Runnable() {
gotoState1();
}, 250);
}
private void gotoState1() {
// It's now 1/4 second since onResume() was called
displayNextScreen();
myHandler.postDelayed(new Runnable() {
gotoState2();
}, 250);
}
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
79897 次 |
| 最近记录: |