0

这是我的情况:我有一个服务正在运行,每次我部署我的应用程序时,服务都会消失settings>>application>>runningService(因此,服务没有运行)我该如何设置它以使服务不会消失?我试过了,startForeground但没有奏效。

AndroidManifest

    <service
        android:name=".service.PhoneCallInOutService"
        android:enabled="true"
        android:exported="false" >
    </service>  

这就是我在我的活动中启动服务的方式:

    chkCallsRecord.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            boolean isChecked = chkCallsRecord.isChecked();
            updateBackgroundTasks(isChecked);
        }
    });

实际启动服务的方法:

private void updateBackgroundTasks(boolean start) {
    Intent serviceIntent = new Intent(getApplicationContext(),PhoneCallInOutService.class);             

    if (start) {
        getApplicationContext().startService(serviceIntent);

    } else {
        getApplicationContext().stopService(serviceIntent);
    }
}

这是服务:

public class PhoneCallInOutService extends Service {
    private TelephonyManager telephonyMgr;
    private PhoneCallStateListener pcsListener;
    private OutgoingCallReceiver ocReceiver;        

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

    // Listener
    pcsListener = new PhoneCallStateListener(getApplicationContext(),appDto);
    telephonyMgr = (TelephonyManager)getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
    telephonyMgr.listen(pcsListener, PhoneStateListener.LISTEN_CALL_STATE);

    // Receiver
    ocReceiver = new OutgoingCallReceiver(getApplication());
    IntentFilter intentF = new IntentFilter(Intent.ACTION_NEW_OUTGOING_CALL);
    getApplicationContext().registerReceiver(ocReceiver, intentF);

    return START_STICKY;
}

    @Override
public void onDestroy() {
        super.onDestroy();      

    // Listener
        telephonyMgr.listen(pcsListener, PhoneStateListener.LISTEN_NONE);

        // Receiver
        getApplicationContext().unregisterReceiver(ocReceiver);     
    }

@Override
public IBinder onBind(Intent arg0) {
    return null;
}

}

非常感谢您提前。

4

1 回答 1

0

如果部署意味着您尝试启动应用程序的新版本,那么这实际上是正常和预期的行为。通过部署新版本,您可以替换旧代码(包括服务代码),因此必须首先将其杀死以避免任何崩溃和其他异常情况。所以你的旧版本的应用程序完全被杀死了。然后安装新的应用程序并且通常会自动启动。您的应用程序创建的数据通常会保留,但也很正常。

编辑

出于安全原因,您不允许在更新后重新启动。用户必须这样做。至于“他/她可能认为服务仍在运行,这是不正确的”,使用“On Going”类型的通知来指示正在运行的服务

于 2013-07-22T13:10:15.923 回答