まず、バックグラウンドで作業する必要のあるアプリケーションを作成します(ユーザーがアプリケーションを終了した場合でも)。私はブルートゥースサーバー(ラズベリーパイ)を持っていて、私のアプリはそのサーバーのクライアントのように行動するはずです。接続が確立されたら、私はそれを生かしておく必要があります。ユーザーがあまりにも多くのpromサーバーまたはサーバーから特定の切断コマンドを送信した場合にのみ切断する必要があります。だから私は単にBluetoothChatExampleを見つけ、サービスからすべてのコードをサービスに入れました(ユーザーがアプリケーションを殺しても、私のサービスは私の主な活動とは独立していなくてもコミュニケーションが必要なので)。あなたは私がSTART_STICKY
として私のサービスを始めたが、ここで私は、「最近使用したアプリ」リストからアプリケーションを殺していたときに問題だ見ることができるようにここでアクティビティの破棄後にAndroidサービスが再作成される
は私のサービスからのいくつかのコードスニペットだから
public class BluetoothCommunicationService extends Service {
public BluetoothCommunicationService() {
}
@Override
public void onCreate() {
super.onCreate();
//....
//....
//....
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(intent.getAction.equals("stop") {
stopSelf();
}
return START_STICKY;
}
private class AcceptThread extends Thread {
//....
}
private class ConnectThread extends Thread {
//....
}
private class ConnectedThread extends Thread {
//....
}
@Override
public void onDestroy() {
super.onDestroy();
}
} です私もサービスを殺しています(onDestroy()
が呼び出されていなくても!!!)、もう一度onCreate
が呼び出され、サービスは最初から開始されます。しかし、ブルートゥース通信はソケットに基づいているため、再作成され、接続が失われます。私も試みたSTART_NOT_STICKY
しかし、私のアプリケーションを閉じるとすぐに私のサービスは破壊され、決して再作成されません。ユーザーが自分のアプリを閉じた後でもサービスを生きたままにして(それを再作成しないように)できますか?
サービスを別のプロセスで実行しても、サービスをシャットダウンするかプロセスを終了するかのAndroidの決定には影響しません。 –
はい、アプリのプロセスを終了してサービスを稼働させたい場合は、別のプロセスを作成する必要があります。アプリを殺すプロセスとアプリケーションのみが、サービスのプロセスに影響を与えません。私が理解する限り、彼らは独立して働き、それはDavidが求めていたものです。 –
ユーザーが手作業でプロセスを強制終了することについて話していただけの場合、その答えは「しないでください」となります。 –