在我的应用程序中,我使用IntentService来完成一些工作。我想知道有多少意图正在等待处理,因为IntentService将它们保存在“工作队列”中,并在前一个意图的onStartCommand()方法执行完毕后,将下一个意图发送到onStartCommand()方法中。
我该如何找出在这个“工作队列”中有多少个意图正在等待?
我该如何找出在这个“工作队列”中有多少个意图正在等待?
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
}
}
使用SharedPreferences的解决方案:
根据文档,当IntentService
接收到启动请求时,系统会调用onHandleIntent(Intent)
。
因此,每当您向队列中添加一个Intent
,都会增加并存储一个表示队列中Intent
数量的Integer
:
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);
}
onHandleIntent
(你是不是想说onStartCommand
?)只有在“前一个”onHandleIntent
完成后才会被调用。无论如何,这种方法有点像黑客行为,难道没有直接访问意图队列的方法吗?另外,为什么要将整数存储在 sharedPreferences 中,而不是在 IntentService 类中使用私有(静态?)变量? - Jonas CzechonStartCommand
替换onHandleIntent
。 - Marcus