最近我一直在努力工作,在正確處理之前我無法前進。這裏是我的問題:在主頁按鈕按下期間管理片段中的數據
我一直在使用我的活動內的藍牙,而現在
描述。我用它將一些數據傳送給遠程設備。此通信是我項目中最重要的部分,因爲它發送和接收修改用戶界面並可能更改配置的操作。我保留一個無UI的片段來包含適配器。在創建片段時,適配器會創建一次。之後,片段將繞過適配器創建,如果它已經有它的一個實例。
我做這樣的事情:
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");
}
}
爲什麼我用這種實現的?因爲我不希望藍牙適配器在配置更改後重新初始化。一切正常,直到我按Home按鈕並返回活動。從這一點開始,片段重新創建一個新的適配器,這意味着運行onCreate時適配器爲空。我知道這是因爲我在創建適配器之前在日誌中收到錯誤消息。
我的結論:
因此,這裏是我的結論:即使片段上的配置變化摧毀,我的適配器保持活動狀態並實例化,但是當用戶按home,碎片的垃圾每個變量它包含的內容。我對嗎?
問:
我需要保持抓住了即使用戶是關閉應用程序的藍牙適配器。任何人都知道爲什麼會發生這種情況,還是有一種用戶友好的方式來避免這種情況?在這種情況下,當家庭按下時,我不可能避免數據被破壞,有沒有辦法區分家庭和方向的變化,以便我可以安全地斷開藍牙連接?
請注意,用戶仍然可以按壓並結束藍牙連接,這對我來說很好,因爲他特別說「我不希望此應用程序再運行」。
非常感謝您的幫助。如果您需要更多規格,錯誤信息或其他內容,請隨時詢問。
感謝您長時間閱讀的最詳細的問題之一。我可以給你一個答案,但它需要一些來回來解決你的確切情況。你可聯繫嗎? freenode上的環聊或#android-dev IRC或許? – Simon 2014-10-29 21:03:09
@Simon它可能是不可能的,因爲它是一個工作過程,並維持在受限制的範圍內。但是如果你能將我重定向到可以提供幫助的資源,我會非常高興。你有什麼想法?什麼可以幫助我保留對象的實例超過片段的破壞?或檢查家是否按下?感謝您的未來幫助。 – 2014-10-30 12:21:35