首页 > 开发 > Android > 正文

android如何后台运行定时方法

2017-09-08 15:24:57  来源:网友分享

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

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

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

解决方案

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

在AndroidManifest.xml中加入

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

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