2013-07-05 2 views
1

в моем приложении я использую намерение:сохранить Intent после поворота экрана

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, который вы можете добавить Parcelable и Serializable объектов. Это должно хорошо работать для вашего объекта Intent, так как он реализует Parcelable, но он может не работать, например, Handler, поскольку он только расширяет Object.

Другое решение состоит в том, чтобы сделать эти элементы статическими. Однако будьте очень осторожны, если вы решите сделать это. Убедитесь, что значение статического члена никогда не держится на Context или иерархии вида и т. Д., Или вы можете легко ввести утечки памяти.

Если ни один из них не является приемлемым для вас, существует вариант, предложенный Тушаром. Однако, если вы не будете осторожны, это сделает вашу жизнь очень трудной очень быстро. Большая причина, по которой действия уничтожаются и воссоздаются, так что ресурсы могут быть перезагружены. Поэтому, если у вас есть макеты, строки, цвета, размеры или в основном любой ресурс, специально предназначенный для ландшафта или планшета или разных версий, вам придется перезагрузить весь пользовательский интерфейс самостоятельно.