android如何后台运行定时方法

应用有个需求,是定时去服务器获取一个账号是否有新的动态。
就像新浪微博那种,打开客户端,会自动提示有多少个 @ 。
我现在想到的方案是这样:

Timer timer = new Timer; timer.scheduleAtFixedRate new TimerTask { public void run { try { checkEvent; Thread.sleep1000; } catch Exception ie { } } }, 1000, 1000 * 30;

不知道还有没有别的更合理的方案
我这样做会不会有什么风险?
求有经验的大侠分享。。。

public class RepeatTaskScheduler extends BroadcastReceiver { public static final String ACTION = "com.yourcompanyname.appname.action.RepeatTaskSchedule"; @Override public void onReceiveContext context, Intent intent { if ACTION.equalsaction { checkEvent; } }
}
//在你想要的地方启动
public class YourActivity extends Activity{ @Override public void onCreate { super.onCreate; //如果interval的值太大会失效,几个小时没问题 setRepeatTasks1000, 1000 * 30; } private void setRepeatTaskslong triggerTime, long interval { AlarmManager am = AlarmManagergetSystemServiceContext.ALARM_SERVICE; Intent intent = new IntentRepeatTaskScheduler.ACTION; //系统中如果有这个pendingIntent 取消 PendingIntent pending = PendingIntent.getBroadcastthis, 0, intent, PendingIntent.FLAG_NO_CREATE; if pending != null { am.cancelpending; } pending = PendingIntent.getBroadcastthis, 0, intent, 0; am.setRepeatingAlarmManager.RTC_WAKEUP, triggerTime, interval, pending; }
}

在AndroidManifest.xml中加入

<receiver android:name=".RepeatTaskScheduler"> <intent-filter> <action android:name="com.yourcompanyname.appname.action.RepeatTaskSchedule" /> </intent-filter>
</receiver>

代码我没测试过,只介绍思路,有问题留言

考虑用Handler吧

Handler handler; @Override public void onCreateBundle savedInstanceState { // ... handler = new Handler { @Override public void handleMessageMessage msg { updateUI; } }; Thread thread = new Thread { @Override public void run { whiletrue { Message msg = new Message; handler.sendMessagemsg; try { sleep3*1000; // 3 seconds } catch InterruptedException e { } } } }; thread.start; } private synchronized void updateUI { // ... }

应该优先使用AlarmManager,Handler比较耗电,而且容易导致内存泄露。

发表评论

电子邮件地址不会被公开。 必填项已用*标注