Chr*_*ins 48
我总是建议使用Handler.
它比内置类更多的工作,但我发现它的效率更高,你可以更好地控制它.
该处理器是将在一个特定的处理代码执行的类Looper/ Thread默认情况下,它是在创建线程,否则,你可以指定处理程序通过在经过对其执行代码Looper的Handler构造一样-new Handler(Looper.getMainLooper());
我推荐looper的原因是因为你有更高的控制灵活性,因为它比TimerTask方法略低.
通常,它们对于跨线程执行代码非常有用.例如,用于跨线程管道数据.
两个主要用途是:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
final Handler h = new Handler();
h.postDelayed(new Runnable()
{
private long time = 0;
@Override
public void run()
{
// do stuff then
// can call h again after work!
time += 1000;
Log.d("TimerExample", "Going for... " + time);
h.postDelayed(this, 1000);
}
}, 1000); // 1 second delay (takes millis)
}
Run Code Online (Sandbox Code Playgroud)
简单使用!
或者您可以使用消息来减少对象创建.如果您正在考虑高速更新UI等 - 这将减少垃圾收集器的压力.
class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
MyTimers timer = new MyTimers();
timer.sendEmptyMessage(MyTimers.TIMER_1);
timer.sendEmptyMessage(MyTimers.TIMER_2);
}
public static class MyTimers extends Handler
{
public static final int TIMER_1 = 0;
public static final int TIMER_2 = 1;
@Override
public void handleMessage(Message msg)
{
switch (msg.what)
{
case TIMER_1:
// Do something etc.
Log.d("TimerExample", "Timer 1");
sendEmptyMessageDelayed(TIMER_1, 1000);
break;
case TIMER_2:
// Do another time update etc..
Log.d("TimerExample", "Timer 2");
sendEmptyMessageDelayed(TIMER_2, 1000);
break;
default:
removeMessages(TIMER_1);
removeMessages(TIMER_2);
break;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
显然这不是一个完整的实现,但它应该给你一个良好的开端.
| 归档时间: |
|
| 查看次数: |
38160 次 |
| 最近记录: |