2013-07-05 208 views
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); 
} 

我的问题是如何..保存所有这些代码旋转后?谢谢!

回答

2

跨旋转保存状态的推荐方法是将它们保存在outState上。这是通过覆盖onSaveInstanceState方法来完成的。此方法为您提供Bundle outState对象,您可以将ParcelableSerializable对象添加到。这应该适用于您的Intent对象,因为它实现Parcelable,但它可能不适用于说Handler,因为它只扩展Object

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

如果这些都不能被您接受,Tushar会提出这个选项。但是,除非你小心,否则这会让你的生活非常困难。活动被破坏和重新创建的一个重要原因是资源可以重新加载。因此,如果您有布局,字符串,颜色,维度或基本上任何专门针对横向,平板电脑或不同版本的资源,则必须自行重新加载整个用户界面。