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

デプロイとは、アプリの新しいビルドを起動しようとすることを意味する場合、これは実際には正常であり、予期される動作です。新しいビルドをデプロイすると、古いコード (サービス コードを含む) が置き換えられるため、クラッシュやその他の異常を回避するために、まず古いコードを強制終了する必要があります。したがって、アプリの古い反復は完全に殺されます。次に、新しいアプリがインストールされ、ほとんどの場合、自動起動されます。アプリによって作成されたデータは通常残りますが、これも正常です。

編集

セキュリティ上の理由から、更新後に再起動することはできません。ユーザーはこれを行う必要があります。「彼/彼女はサービスがまだ実行されていると想定している可能性がありますが、これは真実ではありません」については、タイプ「進行中」の通知を使用して、実行中のサービスを示します

于 2013-07-22T13:10:15.923 に答える