我在Android应用程序中阅读了很多关于处理旋转的内容,但我仍然有很多问题需要了解。
让我解释一下我现在在我的应用程序中使用的问题或实现。
如果要打开某个活动,则会向服务器发送获取请求。此请求将在Thread(新线程(...))中执行,如果请求已完成,则活动的ui将被刷新。
但是,如果用户旋转他的设备,我该怎么办?
默认情况下,活动将被销毁,请求将再次启动并启动新线程,但被破坏活动的线程可能仍在运行。
我想,这是一种非常错误的方式,我现在有了。
但是处理这个问题的最佳方法是什么?
可能是禁止轮换的最好方法,但如果我不想要那么?!
可能是我问题的第二部分:
我看到了video form Google IO。 Dobjanschi先生建议使用服务并将检索到的数据存储在内容提供商中。所以,我可能会使用服务来执行我的请求。但是每次get请求完成后都应该替换数据吗?!
答案 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使用当前方向。