首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android中通过更改方向来维护ServiceConnection

在Android中通过更改方向来维护ServiceConnection
EN

Stack Overflow用户
提问于 2010-12-06 13:29:03
回答 3查看 1.1K关注 0票数 1

我有一个持有服务的ServiceConnection的活动。当方向改变时,ServiceConnection看起来会丢失并重新创建。

这是不可取的。我希望通过活动的重新创建来维护ServiceConnection。我正在寻找一个好的模式来解决这个问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-06 15:05:39

看看Activity.onRetainNonConfigurationInstance()和相关的getLastNonConfigurationInstance()方法--它们可能会有用。

票数 1
EN

Stack Overflow用户

发布于 2012-01-25 00:45:43

不幸的是,使用onRetainNonConfigurationInstance/getLastNonConfigurationInstance可能会导致泄漏。在我的例子中(我使用IntentService上传远程服务器上的文件),我在考虑的活动中声明了我的连接,例如:

代码语言:javascript
复制
private ServiceConnection mConnection = new ServiceConnection() {
    public void onServiceConnected(ComponentName className, IBinder service) {
        mServiceMessenger = new Messenger(service);
        mConnectedToService = true;
    }

    public void onServiceDisconnected(ComponentName className) {
        mConnectedToService = false;
        mServiceMessenger = null;
    }
};

mServiceMessenger是Messenger的一个实例,它允许我向上传任务发送取消订单。

尽管如此,当我使用onRetainNonConfigurationInstance和getLastNonConfigurationInstance测试解决方案时,我发现(多亏了Eclipse中的MAT插件)屏幕旋转涉及到我的活动上下文的大量泄漏。

为了解决这个问题(因为我的应用程序复杂性允许我这样做),我创建了一个单例,将处理到IntentService的连接(以及与Activity的通信)所需的所有元素组合在一起。因此,当旋转屏幕时,创建的新活动将取回由单例管理的连接,并且可以在不丢失信息的情况下使用它。

票数 1
EN

Stack Overflow用户

发布于 2010-12-06 15:11:53

在清单的activity属性中使用android:configChanges="orientation“。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4363486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档