安卓定时更新UI两种方法:
(1)仅在应用程序生命周期内发生的定时操作,Handler类与Timer和Thread类的结合,效率比较高,代码简单
(2)AlarmManger定时,适合长期在后台运行的的定时任务,具有唤醒cpu的功能,需结合服务和广播。
代码实现:
第一种方法分三步走,先创建Timer对象
Timer timer = new Timer();
再创建TimerTask的匿名类 TimerTask task = new TimerTask() {
@Override
public void run() {
Message msg = handler.obtainMessage();
msg.what = BluetoothChat.MESSAGE_CLOCK;
handler.sendMessage(msg);
}
};
最后启动TimerTasktimer.schedule(task, 1000,1000);
第一个参数是Timer,第二个参数是第一次延迟1000毫秒执行,第三个参数是再隔1000毫秒执行
第二种方法,也分三步走,首先创建一个广播接收器
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
public class ClockReceiver extends BroadcastReceiver {
Handler handler;
public ClockReceiver(Handler handler) {
this.handler = handler;
}
@Override
public void onReceive(Context context, Intent intent) {
Message msg = handler.obtainMessage();
msg.what = BluetoothChat.MESSAGE_CLOCK;
handler.sendMessage(msg);
}
}
然后创建一个服务
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.SystemClock;
import android.util.Log;
public class ClockService extends Service {
public ClockService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Intent ClockIntent = new Intent("clock.update.com");//定时发送广播
sendBroadcast(ClockIntent);
AlarmManager manager = (AlarmManager)getSystemService(ALARM_SERVICE);
int time = 10000;//延时的时间
long triggerAtTime = SystemClock.elapsedRealtime()+time;
Intent i = new Intent(this,ClockService.class);
PendingIntent pi = PendingIntent.getService(this,0,i,0);
manager.cancel(pi);
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,triggerAtTime,pi);
return super.onStartCommand(intent, flags, startId);
}
}
最后,
启动服务并
注册广播接收器
Intent intent = new Intent(context,ClockService.class);
context.startService(intent);
ClockReceiver receiver = new ClockReceiver(mHandler);
IntentFilter filter = new IntentFilter();
filter.addAction("clock.update.com");
context.registerReceiver(receiver,filter);
这样就ok了,如有什么错误,希望大家能够批评指正。