2014-10-29 19 views
2

最近我一直在努力工作,在正確處理之前我無法前進。這裏是我的問題:在主頁按鈕按下期間管理片段中的數據

我一直在使用我的活動內的藍牙,而現在

描述。我用它將一些數據傳送給遠程設備。此通信是我項目中最重要的部分,因爲它發送和接收修改用戶界面並可能更改配置的操作。我保留一個無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,碎片的垃圾每個變量它包含的內容。我對嗎?

問:

我需要保持抓住了即使用戶是關閉應用程序的藍牙適配器。任何人都知道爲什麼會發生這種情況,還是有一種用戶友好的方式來避免這種情況?在這種情況下,當家庭按下時,我不可能避免數據被破壞,有沒有辦法區分家庭和方向的變化,以便我可以安全地斷開藍牙連接?

請注意,用戶仍然可以按壓並結束藍牙連接,這對我來說很好,因爲他特別說「我不希望此應用程序再運行」。

非常感謝您的幫助。如果您需要更多規格,錯誤信息或其他內容,請隨時詢問。

+0

感謝您長時間閱讀的最詳細的問題之一。我可以給你一個答案,但它需要一些來回來解決你的確切情況。你可聯繫嗎? freenode上的環聊或#android-dev IRC或許? – Simon 2014-10-29 21:03:09

+0

@Simon它可能是不可能的,因爲它是一個工作過程,並維持在受限制的範圍內。但是如果你能將我重定向到可以提供幫助的資源,我會非常高興。你有什麼想法?什麼可以幫助我保留對象的實例超過片段的破壞?或檢查家是否按下?感謝您的未來幫助。 – 2014-10-30 12:21:35

回答

2

在深入瞭解片段生命週期以及應用程序如何在後臺進行管理之後,我已經談到:九個地獄裏的家庭按鈕應該如何殺死應用程序和片段。操作系統不應該爲未來的使用而存活嗎?這是我發現的。

答:

該應用程序是在家裏按殺害的事實打電話給我一個鐘。這不應該是這樣。過了一段時間,我意識到在開發人員設置中有一個選項,它指定在用戶離開時停止活動,當我們按下home按鈕時就是這樣。我剛剛關掉它。

此選項仍然有問題。奇怪的是,當我在活動創建過程中查找它時,我的適配器所在的片段仍然活着,即使我的應用程序「已被殺死」。

無論如何謝謝大家。