屏幕旋转
问题描述:
后保存到意向我的申请,我使用一个意图:屏幕旋转
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);
}
我的问题是如何..保存所有这些代码旋转后?谢谢!
答
跨旋转保存状态的推荐方法是将它们保存在outState上。这是通过覆盖onSaveInstanceState
方法来完成的。此方法为您提供Bundle outState
对象,您可以将Parcelable
和Serializable
对象添加到。这应该适用于您的Intent
对象,因为它实现Parcelable
,但它可能不适用于说Handler
,因为它只扩展Object
。
另一个解决方案是使这些成员为静态。但是,如果您决定这样做,请非常小心。确保静态成员的值永远不会保留在Context
或视图层次结构等中,否则您可能很容易引入内存泄漏。
如果这些都不能被您接受,Tushar会提出这个选项。但是,除非你小心,否则这会让你的生活非常困难。活动被破坏和重新创建的一个重要原因是资源可以重新加载。因此,如果您有布局,字符串,颜色,维度或基本上任何专门针对横向,平板电脑或不同版本的资源,则必须自行重新加载整个用户界面。