1

私のアプリケーションでは、インテントを使用します:

private Handler mHandler = new Handler();  
.
.  
mServiceIntent = new Intent(this, ObdGatewayService.class);
mServiceConnection = new ObdGatewayServiceConnection();
mServiceConnection.setServiceListener(mListener);
// bind service
Log.d(TAG, "Binding service..");
bindService(mServiceIntent, mServiceConnection,
                Context.BIND_AUTO_CREATE);

ここで onCreate での私のアクティビティが新しいサービスを開始します。これは私の onDestroy です:

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

    mServiceIntent = null;
    mServiceConnection = null;
    mListener = null;
    mHandler = null;
}

これは mServiceConnection です。

public class ObdGatewayServiceConnection implements ServiceConnection{

private static final String TAG = "com.echodrive.io.ObdGatewayServiceConnection";

private IPostMonitor service = null;
private IPostListener listener = null;

public void onServiceConnected(ComponentName name, IBinder binder) {
    service = (IPostMonitor) binder;
    service.setListener(listener);
}


public void onServiceDisconnected(ComponentName name) {
    service = null;
    Log.d(TAG, "Service disconnesso.");
}


public boolean isRunning() {
    if (service == null) {
        return false;
    }

    return service.isRunning();
}


public void addJobToQueue(ObdCommandJob job) {
    if (null != service)
        service.addJobToQueue(job);
}

public void setServiceListener(IPostListener listener) {
    this.listener = listener;
}

mListener は、インターフェイスからのリスナーです。

public interface IPostListener {
void fineTest(DatiTest risultati);
void startAcquisizione();
void aquisizioneTerminata();
void aquisizioneInterrotta(String motivo);
void connessioneCorretta();
void gpsStato(boolean stato);
}

私の問題は..回転後にこのすべてのコードをどのように保存するのですか? ありがとう!

4

1 に答える 1

2

ローテーションにまたがって状態を保存するための推奨される方法は、それらを outState に保存することです。これは、onSaveInstanceStateメソッドをオーバーライドすることによって実現されます。このメソッドは、Bundle outState追加できるオブジェクトParcelableSerializableオブジェクトを提供します。これはIntent実装されているため、オブジェクトに対しては正常に機能するはずですが、拡張のみであるためParcelable、たとえば機能しない場合があります。HandlerObject

別の解決策は、これらのメンバーを静的にすることです。ただし、これを行う場合は十分に注意してください。静的メンバーの値がContextビュー階層などに保持されないようにしてください。そうしないと、簡単にメモリ リークが発生する可能性があります。

これらのどちらも受け入れられない場合は、Tushar が提案するオプションがあります。ただし、注意しないと、これはあなたの人生を非常に困難にします。アクティビティが破棄されて再作成される主な理由は、リソースを再ロードできるようにするためです。したがって、レイアウト、文字列、色、寸法、または基本的にランドスケープ、タブレット、または異なるバージョン専用のリソースがある場合は、UI 全体を自分でリロードする必要があります。

于 2013-07-05T17:25:51.240 に答える