我是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,但缺少额外的东西 . 我在网上搜索了很多但找不到任何东西 . 任何帮助都会很棒 . 谢谢!