android-service - 在队列中,IntentService查找等待的意向数

  显示原文与译文双语对照的内容
0 0

在我的应用中,我使用IntentService做一些工作。 我想知道等待处理多少个意图,因为IntentService将它们保存在'工作队列'中,并将下一个发送到 onStartCommand()

我如何才能发现在这个'工作队列'中有多少个意图正在等待?

时间: 原作者:

0 0

使用 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 s 时,你只需获取该值:


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

原作者:
0 0

实际上很简单:你需要做的就是重写 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
 }
}

原作者:
...