我是Android的新手,我正在尝试使用Service . 为了确保在关闭应用程序并收到先前的意图时服务重新启动,我们将onStartCommand函数中的return语句写为:return Service.START_REDELIVER_INTENT .
我得到的意图,但不是意图的额外 . 以下是代码示例:
@Override
public void onCreate() {
// Start up the thread running the service. Note that we create a
// separate thread because the service normally runs in the process's
// main thread, which we don't want to block. We also make it
// background priority so CPU-intensive work will not disrupt our UI.
HandlerThread thread = new HandlerThread("ServiceStartArguments",
Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
// Get the HandlerThread's Looper and use it for our Handler
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
// For each start request, send a message to start a job and deliver the
// start ID so we know which request we're stopping when we finish the job
if (null != intent) {
if(intent.hasExtra("IP")){
Log.d(TAG, "intent has IP");
}else{
Log.d(TAG, "NO IP");
}
if(intent.hasExtra("Topic")){
Log.d(TAG, "intent has Topic as well");
}else{
Log.d(TAG, "NO TOPIC");
}
Log.d("anant", "intent is NOT null");
}else{
Log.d("anant", "intent is null");
}
Message msg = mServiceHandler.obtainMessage();
msg.arg1 = startId;
mServiceHandler.sendMessage(msg);
// If we get killed, after returning from here, restart
return Service.START_REDELIVER_INTENT;
}
@Override
public IBinder onBind(Intent intent) {
Server_IP = intent.getExtras().getString("IP");
Topic = intent.getExtras().getString("Topic");
appPointer = intent.getExtras().getLong("appPointer");
appID_appPointer.put(Topic, appPointer);
return null;
}
输出为:NO IP NO TOPIC intent not null
IP和TOPIC变量从另一个文件放入intent . 当我第一次运行程序时,它们正常工作,收到额外的东西,并且按预期结果 . 只有当应用程序关闭并且服务重新启动时,我才发现intent not null,但缺少额外的东西 . 我在网上搜索了很多但找不到任何东西 . 任何帮助都会很棒 . 谢谢!