代码之家  ›  专栏  ›  技术社区  ›  Tima

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

  •  0
  • Tima  · 技术社区  · 14 年前

    我读了很多关于在android应用程序中处理轮换的文章,但是我仍然有很多问题需要理解。

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

    如果将打开活动,则会向服务器发送get请求。此请求将在线程(新线程(…))中执行,如果请求已完成,则将刷新活动的ui。

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

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

    我想,这是一个相当错误的方式,我现在。

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

    也许是禁止轮换的最好办法,但如果我不想这样呢?!

    也许这是我问题的第二部分:

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

    3 回复  |  直到 14 年前
        1
  •  0
  •   Shardul    14 年前

    不知道具体是怎么做的,你可以尝试保存实例,并在配置更改时使用以下方法检索相同的实例:

    我已经读过它们,但还没有真正实现它们。我希望它能给你一些开始。

    @Override
    public Object onRetainNonConfigurationInstance() {
    return(myServerThread);
    }
    
    private void restoreServerFunctions() {
    if (getLastNonConfigurationInstance()!=null) {
    myServerThread=(Thread)getLastNonConfigurationInstance();
    }
    }
    
        2
  •  0
  •   Janusz Daniel Rindt    14 年前

    可以指定活动处理旋转本身。这是通过添加:

    android:configChanges="keyboardHidden|orientation"
    

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

    小提示:如果您只执行一个小服务器任务,请使用 AsyncTask 在后台执行对服务器的调用,而不是创建线程。这将最小化一些编程工作,您需要将线程的结果传递给活动并更新您的UI。

        3
  •  -1
  •   Lie Ryan Bryan    14 年前

    一个简单的方法,虽然我从未尝试过。当线程完成时,不要刷新当前UI,而是用刚刚下载的内容启动一个新的活动。因此,首先,用空白页(或者仅仅是页面的框架)启动一个活动,然后按你喜欢的方式旋转空白页面,然后下载线程产生一个新的活动,用当前的方向替换加载的内容页面的空白页面活动。