处理服务器请求和设备轮换

时间:2010-11-21 14:21:42

标签: android rest rotation

我在Android应用程序中阅读了很多关于处理旋转的内容,但我仍然有很多问题需要了解。

让我解释一下我现在在我的应用程序中使用的问题或实现。

如果要打开某个活动,则会向服务器发送获取请求。此请求将在Thread(新线程(...))中执行,如果请求已完成,则活动的ui将被刷新。

但是,如果用户旋转他的设备,我该怎么办?

默认情况下,活动将被销毁,请求将再次启动并启动新线程,但被破坏活动的线程可能仍在运行。

我想,这是一种非常错误的方式,我现在有了。

但是处理这个问题的最佳方法是什么?

可能是禁止轮换的最好方法,但如果我不想要那么?!

可能是我问题的第二部分:

我看到了video form Google IO。 Dobjanschi先生建议使用服务并将检索到的数据存储在内容提供商中。所以,我可能会使用服务来执行我的请求。但是每次get请求完成后都应该替换数据吗?!

3 个答案:

答案 0 :(得分:0)

确切地知道它是如何完成的,您可以尝试保存实例并在配置更改时使用以下方法检索实例:

我已经阅读过它们但尚未真正实现它们。我希望它可以给你一些开始。

@Override
public Object onRetainNonConfigurationInstance() {
return(myServerThread);
}

private void restoreServerFunctions() {
if (getLastNonConfigurationInstance()!=null) {
myServerThread=(Thread)getLastNonConfigurationInstance();
}
}

答案 1 :(得分:0)

您可以指定活动自己处理旋转。这是通过添加:

完成的
android:configChanges="keyboardHidden|orientation"

在Android清单中的活动标记中。你不必实际处理旋转,但这将告诉android不要破坏你的活动。基本活动类将为您处理用户界面的所有旋转,并且您的线程将被正确执行。

小方说明:如果您只做一个小型服务器任务,请使用AsyncTask在后台执行对服务器的调用,而不是创建一个线程。这将最大限度地减少将线程结果传递给活动并更新UI所需的一些编程工作。

答案 2 :(得分:-1)

一种简单的方法,虽然我从未尝试过。当线程完成时,不是刷新当前UI,而是使用刚刚下载的内容启动一个新的Activity。首先,你用一个空白页面(或者只是页面的框架)启动一个Activity,然后根据需要旋转空白页面,然后下载线程生成一个新的Activity,用加载的内容页面替换空白页面Activity使用当前方向。