Suj*_*ith 7 android chat livechat alarmmanager timertask
在android中有一些刷新处理选项,如Timer,TimerTask,ScheduledExecutorService,AlarmManager和Handler.这是最好的方法.
有人检查过上述方法的资源利用率吗?我在这里列出了上述方法的实现.
使用Handler重复执行任务
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
new MyScheduledTask.execute(param);
}
}, TimeInterval);
Run Code Online (Sandbox Code Playgroud)
使用Timer重复执行任务
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
synchronized public void run() {
new MyScheduledTask.execute(param);
}
}}, 10000, 10000);
Run Code Online (Sandbox Code Playgroud)
使用ScheduledExecutorService重复激活任务
ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate
(new Runnable() {
public void run() {
new MyScheduledTask.execute(param);
}
}, 0, 10, TimeInterval);
Run Code Online (Sandbox Code Playgroud)
使用Timer和TimerTask重复执行任务
Timer timer = new Timer();
timer.schedule(new UpdateTimeTask(),1, TimeInterval);
class UpdateTimeTask extends TimerTask {
public void run()
{
new MyScheduledTask.execute(param);
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
AlarmManager类
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.hasExtra("activate")) {
new MyScheduledTask.execute(param);
}
}
}
Run Code Online (Sandbox Code Playgroud)
表现
<receiver android:name="YourPackageHere.AlarmReceiver"></receiver>
Run Code Online (Sandbox Code Playgroud)
为了持续在线,你需要一个Service在线程之上运行的 android。您可以使用您在服务中声明的任何上述方法。
但是,当您制作聊天应用程序时,您必须每 2-3 秒连续访问服务器一次,我认为这对用户不利(就您的应用程序将使用的互联网数据而言)。
用于聊天应用程序的最佳推荐协议是XMPP( Jabber )。它定义了普通聊天应用程序应具有的所有规则,并且非常容易实现。它是一个推送通知类型的服务器,每当有新消息到达或添加新朋友时,都会自动向客户端推送通知。(甚至 Gtalk 也使用此协议)
有一个很好的开源服务器提供了XMPP名为Openfire的集成,我推荐它。
该公司还提供了一个名为Smack的客户端集成库,您可以在应用程序中轻松实现该库以使用简单的聊天功能。
| 归档时间: |
|
| 查看次数: |
1636 次 |
| 最近记录: |