2014-10-29 2 views
2

Я что-то борюсь с чем-то недавно, и я не могу двигаться вперед, пока он не будет правильно обработан. Вот моя проблема:Управление данными в фрагменте во время домашней кнопки нажмите

Описание

Я использую Bluetooth внутри моей деятельности на некоторое время теперь. Я использую его для передачи некоторых данных на удаленное устройство. Это сообщение является самой важной частью моего проекта, поскольку оно отправляет и принимает действия, которые изменяют пользовательский интерфейс и, возможно, изменяет конфигурацию. Я сохраняю фрагмент без интерфейса, чтобы содержать адаптер. Адаптер создается один раз, когда сам фрагмент создается. После этого фрагмент обходит создание адаптера, если он уже имеет экземпляр.

я сделать что-то вроде этого:

BluetoothFragment.java:

public void onCreate(Bundle savedInstanceState) { 

    Log.i(TAG, "Created"); 
    setRetainInstance(true); 

    if(adapter == null) { 
     Log.e(TAG, "Creating a new bluetooth adapter"); 
     adapter = new KBluetooth(new Messenger(mHandler)); 
    } 

    super.onCreate(savedInstanceState); 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 

    // Checks if the attaching activity implements KBluetoothCallback 
    try { 
     mHandler.setCallback((KBluetoothActivities) activity); 
    } 
    catch(ClassCastException castExc) { 
     throw new ClassCastException(activity.toString() + " must implement KBluetoothCallback"); 
    } 
} 

Почему я использую этот вид реализации? потому что я не хочу, чтобы адаптер Bluetooth повторно инициализировался после изменения конфигурации. Все работает нормально, пока я не нажму кнопку «домой» и не вернусь к действию. С этого момента фрагмент воссоздает новый адаптер, который означает, что адаптер был пустым, когда была запущена onCreate. Я знаю это, потому что перед созданием адаптера я получаю сообщение об ошибке в журнале.

Мой вывод:

Так вот мой вывод: даже если фрагмент будет уничтожен на изменение конфигурации, мой адаптер хранится в живых и экземпляр, но когда пресса домашний пользователь, фрагмент мусора каждые параметры, то содержит. Я прав?

Вопрос:

мне нужно держать ручку над адаптером Bluetooth, даже если пользователь находится вне приложения. Кто-нибудь знает, почему это происходит, или есть ли удобный способ избежать такой ситуации? В случае, если мне не удастся избежать уничтожения данных при нажатии на дом, есть ли способ провести различие между изменением дома и ориентации, чтобы я мог безопасно отключить Bluetooth?

Обратите внимание, что пользователь все еще может нажать и закрыть соединение Bluetooth, что прекрасно для меня, потому что он специально сказал: «Я больше не хочу, чтобы это приложение запускалось».

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

+0

Спасибо за один из самых подробных вопросов, которые я прочитал в течение длительного времени. Вероятно, я могу дать вам ответ, но для разработки вашего точного сценария потребуется немного назад и вперед. Вы соприкоснулись? Hangouts или # android-dev IRC на freenode, возможно? – Simon

+0

@Simon Это может быть невозможно, поскольку это рабочий процесс и поддерживается внутри ограниченного периметра. Но если бы вы могли перенаправить меня на источник, который мог бы помочь, я был бы очень доволен. Какова ваша идея? что могло бы помочь мне сохранить экземпляр объекта над разрушением фрагмента? или проверить, нажата ли кнопка дома? Спасибо за вашу дальнейшую помощь. –

ответ

2

После глубокого просмотра жизненного цикла фрагмента и того, как приложение управлялось в фоновом режиме, я пришел к следующему: как в девяти адах есть кнопка дома, которая должна убить приложение и фрагмент внутри него. Разве не следует, чтобы os сохранили его для будущего использования? Вот что я нашел.

Ответ:

Тот факт, что приложение был убит на домашнем прессе позвонил мне звонок. Это не должно быть так. Через некоторое время я понял, что есть опция в настройках разработчика, где он указывает, чтобы убивать активность прямо, когда пользователь ее покидает, а мы - когда мы нажимаем кнопку «домой». Я просто отключил его.

Все еще есть что-то не так с этой опцией.Ужасно, фрагмент, в котором жил мой адаптер, был еще жив, когда я искал его в создании активности, хотя мое приложение было «убито».

В любом случае спасибо всем.

Смежные вопросы