在android中,重复执行任务的最佳方法是什么?(例如:-刷新分数,更新用户界面)
在android中,有一些刷新处理选项,如定时器、TimerTask、ScheduledExecutorService、AlarmManager&Handler。这是最好的方法 是否有人检查上述方法的资源利用率?。我在这里列出了上述方法的实现 使用处理程序重复执行任务在android中,重复执行任务的最佳方法是什么?(例如:-刷新分数,更新用户界面),android,chat,alarmmanager,timertask,livechat,Android,Chat,Alarmmanager,Timertask,Livechat,在android中,有一些刷新处理选项,如定时器、TimerTask、ScheduledExecutorService、AlarmManager&Handler。这是最好的方法 是否有人检查上述方法的资源利用率?。我在这里列出了上述方法的实现 使用处理程序重复执行任务 final Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { new My
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
new MyScheduledTask.execute(param);
}
}, TimeInterval);
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
synchronized public void run() {
new MyScheduledTask.execute(param);
}
}}, 10000, 10000);
ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate
(new Runnable() {
public void run() {
new MyScheduledTask.execute(param);
}
}, 0, 10, TimeInterval);
Timer timer = new Timer();
timer.schedule(new UpdateTimeTask(),1, TimeInterval);
class UpdateTimeTask extends TimerTask {
public void run()
{
new MyScheduledTask.execute(param);
}
}
使用计时器重复执行任务
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
new MyScheduledTask.execute(param);
}
}, TimeInterval);
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
synchronized public void run() {
new MyScheduledTask.execute(param);
}
}}, 10000, 10000);
ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate
(new Runnable() {
public void run() {
new MyScheduledTask.execute(param);
}
}, 0, 10, TimeInterval);
Timer timer = new Timer();
timer.schedule(new UpdateTimeTask(),1, TimeInterval);
class UpdateTimeTask extends TimerTask {
public void run()
{
new MyScheduledTask.execute(param);
}
}
使用ScheduledExecutorService重复执行任务
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
new MyScheduledTask.execute(param);
}
}, TimeInterval);
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
synchronized public void run() {
new MyScheduledTask.execute(param);
}
}}, 10000, 10000);
ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate
(new Runnable() {
public void run() {
new MyScheduledTask.execute(param);
}
}, 0, 10, TimeInterval);
Timer timer = new Timer();
timer.schedule(new UpdateTimeTask(),1, TimeInterval);
class UpdateTimeTask extends TimerTask {
public void run()
{
new MyScheduledTask.execute(param);
}
}
使用带有TimerTask的计时器重复执行任务
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
new MyScheduledTask.execute(param);
}
}, TimeInterval);
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
synchronized public void run() {
new MyScheduledTask.execute(param);
}
}}, 10000, 10000);
ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate
(new Runnable() {
public void run() {
new MyScheduledTask.execute(param);
}
}, 0, 10, TimeInterval);
Timer timer = new Timer();
timer.schedule(new UpdateTimeTask(),1, TimeInterval);
class UpdateTimeTask extends TimerTask {
public void run()
{
new MyScheduledTask.execute(param);
}
}
用于执行计划任务的AlarmManager
public void setupTask(){
// check task is scheduled or not
boolean alarmUp = (PendingIntent.getBroadcast(this, 0,
new Intent("YourPackageHere.AlarmReceiver"),
PendingIntent.FLAG_NO_CREATE) != null);
if ( !alarmUp) {
Intent intent = new Intent("YourPackageHere.AlarmReceiver");
intent.putExtra("activate", true);
PendingIntent pendingIntent =
PendingIntent.getBroadcast(this, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 1);
calendar.set(Calendar.SECOND, 0);
AlarmManager alarmManager =
(AlarmManager)
this.getSystemService(this.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY,
pendingIntent);
calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 7);
calendar.set(Calendar.MINUTE, 0);
alarmManager = (AlarmManager)
this.getSystemService(this.ALARM_SERVICE);
PendingIntent pendingIntent2 =
PendingIntent.getBroadcast(this, 1,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, pendingIntent2);
}
}
AlarmManager类
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.hasExtra("activate")) {
new MyScheduledTask.execute(param);
}
}
}
显示
<receiver android:name="YourPackageHere.AlarmReceiver"></receiver>
要持续在线,您需要一个在线程上运行的android
服务。
您可以在服务中使用上述任何方法
但是,当你制作聊天应用程序时,你必须每2-3秒连续点击服务器一次,我认为这对用户不好(就你的应用程序将使用的互联网数据而言)
聊天应用程序使用的最佳推荐协议是XMPP
()。它定义了普通聊天应用程序应该具备的所有规则,并且非常容易实现。
它是一个推送通知类型的服务器,每当新消息到达或添加新朋友时,它会自动将通知推送到客户端。(即使是Gtalk也使用此协议)
有一个很好的开源服务器,它提供了名为的XMPP
集成,我推荐它
同一家公司还为客户端集成提供了一个名为Smack的库,您可以在应用程序中轻松实现该库,以使用简单的聊天功能。处理程序是最好的运行方法,您可以递归地运行它,这样会更好
如果您期望更多,您应该遵循MQTT方法,这在消息传递协议中是很好的
您不应该定期检查,而应该使用服务,如仅在有新消息可用时才执行操作。Facebook也使用MQTT
。当然,这需要服务器端配置。您可以尝试使用推送通知而不是轮询。这为用户节省了大量浪费的网络流量和电池(最重要的是,您可以防止电话一直处于休眠状态,还可以保持蜂窝调制解调器或WiFi天线处于开启状态,并一直燃烧电池)。如果我没记错的话,GCM服务支持XMPP,这是一个用于聊天应用程序的好协议。