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了,但它可能不适用于say Handler,因为它只扩展Object

另一种解决方案是使这些成员静态。但是,如果您决定这样做,请务必小心。确保静态成员的值永远不会保留在Context视图层次结构等中,否则很容易引入内存泄漏。

如果这些都不被您接受,那么 Tushar 建议的选项。然而,除非你小心,否则这会让你的生活很快变得非常困难。销毁和重新创建活动的一个重要原因是可以重新加载资源。因此,如果您有布局、字符串、颜色、尺寸或基本上任何专门用于横向、平板电脑或不同版本的资源,您将不得不自己重新加载整个 UI。

于 2013-07-05T17:25:51.240 回答