在主页按钮按下期间管理片段中的数据

时间:2014-10-29 19:30:58

标签: android fragment

我最近一直在努力解决问题,直到妥善处理才能继续前进。这是我的问题:

描述

我一直在我的活动中使用蓝牙一段时间了。我用它来传输一些数据到远程设备。此通信是我项目中最重要的部分,因为它发送和接收修改用户界面并可能更改配置的操作。我保留一个无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");
    }
}

为什么我使用这种实现?因为我不希望蓝牙适配器在配置更改后重新初始化。一切正常,直到我按下主页按钮并返回活动。从那时起,片段重新创建一个新的适配器,这意味着在运行onCreate时适配器为null。我知道,因为我在创建适配器之前在日志中收到错误消息。

我的结论:

所以这是我的结论:即使片段在配置更改时被销毁,我的适配器也会保持活动并进行实例化,但是当用户按下home时,片段会对它包含的每个变量进行垃圾处理。我是对的吗?

问题:

即使用户不在应用程序中,我也需要抓住蓝牙适配器。任何人都知道为什么会发生这种情况,或者是否有用户友好的方式来避免这种情况?在这种情况下,我无法避免在按下主页时数据被破坏,是否有办法区分主页和方向更改,以便我可以安全地断开蓝牙连接?

请注意,用户仍然可以在那里重新按下并结束蓝牙连接,这对我来说很好,因为他特意说“我不想让这个应用程序再运行”。

提前感谢您的帮助。如果您需要更多规格,错误消息或其他内容,请随时询问。

1 个答案:

答案 0 :(得分:2)

深入了解片段生命周期以及如何在后台管理应用程序之后,我来到这里:九个地狱中的一个主页按钮应该如何杀死其中的应用程序和片段。操作系统不应该保留它以供未来使用吗?这是我发现的。

<强>答案:

应用程序在家庭媒体上被杀的事实让我大吃一惊。不应该那样。过了一会儿,我才意识到开发人员设置中有一个选项,它指定在用户离开时立即终止活动,我们按下主页按钮时就是这样。我把它关了。

此选项仍有问题。很奇怪,当我在活动创建中查找它时,我的适配器所在的片段仍然存在,即使我的应用程序被“杀死”。

无论如何,谢谢大家。