4

現在、別のプロセスで実行されるサービスがあります。これがメインアクティビティのコードです。

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

    // Start auto complete service.
    autoCompleteServiceIntent = new Intent(AutoCompleteService.class.getName()); 
    startService(autoCompleteServiceIntent);
    bindService(autoCompleteServiceIntent, serviceConnection, 0);        
}

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

    // Stop auto complete service.
    unbindService(serviceConnection);
    stopService(autoCompleteServiceIntent);
    autoCompleteServiceIntent = null;
}

このサービスには以下の特徴があります。

  • サービスは別のプロセスで実行されます。その理由は、大きなデータをメモリにロードするためです。サービスを別のプロセスで実行すると、メモリ制限を大きくすることができます。
  • メインアクティビティが停止すると、サービスも停止します。

onStart / onStopペアでサービスを開始/停止する必要がありますか?または、onCreate/onDestroyでサービスを開始/停止しますか。

私が考えることができる良いことは、onStart / onStopのペアでコードを持っているとき、アクティビティが見えないときはいつでも、未使用のメモリをすぐに解放できることです。したがって、大規模なシステムリソースを解放します。onDestroyは、アクティビティが終了した場合でも、常にすぐに呼び出されるわけではないことに注意してください。

悪い点は、HOMEを押して頻繁に戻ると、サービスがメモリのロード/アンロードを頻繁に実行することです。これにより、アプリケーションのパフォーマンスが大幅に低下する可能性があります。

4

1 に答える 1

3

あなたのシナリオでは、サービスを停止する必要があります。理由は、アクティビティが自己破壊されたとき、差し押さえられたとき、またはメモリが必要なときにシステムによって呼び出されたためです。したがって、それはサービスを終了するための適切な場所になります。

他の場所では、アプリケーション内を行ったり来たりしたり、家に行ったりしたときにonStopが呼び出されます。onDestroyがホームプレスで呼び出されない理由は、アクティビティがまだ破棄されていないためです。アクティビティを閉じて押し戻すと、 onDestroyが呼び出されます。

于 2013-01-10T14:05:13.817 に答える