2011-05-24 107 views
0

我必须在服务中执行重复任务(从互联网下载数据)。我做了下面的代码的任务:使用IntentService执行重复任务

public class MyService extends Service { 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     mHandler.post(mTask); 
    return START_STICKY; 
    } 

    private final Runnable mTask = new Runnable() { 
     @Override 
     public void run() { 
     downloadData(url); 
     mHandler.postDelayed(this, mDelay); 
     } 
    }; 

    @Override 
    public void onDestroy() { 
     mHandler.removeCallbacks(mTask); 
    } 
} 

如果我想使用IntentService而不是服务和移动mHandler.post(mTask);到onHandleIntent因为那时IntentService被杀害的代码被执行只有1次。

@Override 
public void onHandleIntent(Intent intent) { 
    mHandler.post(mTask); 
} 

我可以防止这种情况并使IntentService运行吗?

回答

0

如果服务总体不会很长,并且如果mDelay短(一分钟或更短),您可能只想坚持原来的实施。

如果mDelay很长,您应该使用AlarmManager,所以您的服务只在内存中工作。在这种情况下,AlarmManager报警正在处理定期重复。