IntentService - 查找队列中等待的Intents数

时间:2015-02-13 14:52:04

标签: android android-service android-intentservice

在我的应用程序中,我使用IntentService来完成一些工作。我想知道有多少意图等待处理,因为IntentService将它们保存在“工作队列”中,并在前一个onStartCommand()完成时将下一个意图发送到onStartCommand

如何在“工作队列”中找出有多少意图在等待?

2 个答案:

答案 0 :(得分:7)

实际上这很容易:你需要做的就是覆盖onStartCommand(...)并增加一个变量,并在onHandleIntent(...)中递减它。

public class MyService extends IntentService {

 private int waitingIntentCount = 0;

 public MyService() {
  super("MyService");
 }

 @Override
 public int onStartCommand(Intent intent, int flags, int startId) {
  waitingIntentCount++;
  return super.onStartCommand(intent, flags, startId);
 }


 @Override
 public void onHandleIntent(Intent intent) {
  waitingIntentCount--;
  //do what you need to do, the waitingIntentCount variable contains
  //the number of waiting intents
 }
}

答案 1 :(得分:1)

使用SharedPreferences的解决方案:

根据documentation,当onHandleIntent(Intent)收到启动请求时,系统会调用IntentService

因此,无论何时向队列中添加Intent,都会增加并存储Integer,表示队列中Intent的数量:

public void addIntent(){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    int numOfIntents = prefs.getInt("numOfIntents", 0);
    numOfIntents++;
    SharedPreferences.Editor edit = prefs.edit();    
    edit.putInt("numOfIntents",numOfIntents);
    edit.commit();
}

然后,每次调用onHandleIntent(Intent)时,您都会减少Integer值:

public void removeIntent(){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    int numOfIntents = prefs.getInt("numOfIntents", 0);
    numOfIntents--;
    SharedPreferences.Editor edit = prefs.edit();
    edit.putInt("numOfIntents",numOfIntents);
    edit.commit();
}

最后,无论何时您想查看队列中有多少Intent,您只需获取该值:

public void checkQueue(){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplication());
    int numOfIntents = prefs.getInt("numOfIntents",0);
    Log.d("debug", numOfIntents);
}