2012-08-15 62 views
0

我得到了主要Activity在按钮按下启动其他类名为Getter和Getter类创建1-60 000线程(做网络的东西),所以它需要一些时间,直到他们都完成。我的问题是,当我旋转我的设备时,这些线程正在运行,我的程序停止正常工作。在我的主Activity中,我有一个处理程序,每隔2秒从Getter类获取一个数组,然后将这些值放入本地数组列表中。线程和设备方向

我试过这个解决方案:

Background task, progress dialog, orientation change - is there any 100% working solution?

,但发现它很复杂。所以现在我想知道是否有其他解决方案来解决我的问题。例如,即使我的方向改变,我的线程是否能够继续在后台运行?如果这是不可能的,我可以编程锁定方向到按钮被按下之前的方向,然后等到线程完成,然后再次使方向与传感器一起使用?

+0

现在,当你说“我试过这个解决方案”,然后说“但我觉得它非常复杂”,这是否意味着你真的试过了它?还是你开始和停止,因为它看起来像矫枉过正?从步骤的声音来看,为什么它应该起作用以及为什么应该以这两种方式之一来实现它。 (又名:将任务从活动中分离出来) – TheZ 2012-08-15 19:24:11

+0

我的意思是说,我的步骤对我来说足够清晰,所以在互联网上每一步都有很多搜索,直到我意识到它不会以这种方式工作。我需要更初学者友好的教程。 – 2012-08-15 19:29:16

回答

0

我们处理这个方法是从一个棘手app.Service启动异步任务,并允许异步任务与父服务之间的通信而这又与任何通过BroadcastReceiver框架收听广播事件的人进行通信。我已经走过去描述这个机制here

在方向更改上,您的app.Activity将被销毁,但后台服务将不会(可能是onLowMemory &其他许多情况,但可能不会)。在重新创建活动时,您可以通过我发布here的解决方案查看您的服务是否仍在运行。根据这一结果,您可以决定如何处理用户界面,重新显示/重新添加进度对话框或任何其他内容,并重新注册您的接收器以侦听来自服务的事件。

这些层之间的职责是这样的;

  1. 的AsyncTask
    • 做的工作。
    • 报告后面有什么就看,当它是由触发事件(Intents
    • 做就是它
  2. 服务
    • 主机的取向不知道集装箱的的AsyncTask
    • 寄存器从#onCreate中的AsyncTask发出的事件的侦听器
    • 执行#onStartC中的AsyncTask ommand
    • 停止本身(见stopSelf()),当它接收到来自的AsyncTask
    • 火灾介绍给任何人的进度事件“我已经完成”事件监听
  3. 活动
    • 启动服务然后依次启动AsyncTask。
    • 在#onCreate中注册服务发出事件的监听者
    • 检查onCreate期间服务是否已经运行,以决定工作是否正在进行或需要开始。

3元件具有离散unconfused角色。这就是我们喜欢的方式。这种方法的唯一的细微差别是使用BroadcastReceivers。如果你对这些感觉舒服,那么你就是金。

+0

我可以使用AsyncTask来处理我的一切线程正在处理?例如。我可以用AsyncTask替换我的线程类吗? – 2012-08-15 21:00:39

+0

我不得不引用JavaDoc来回答这个问题,而不是中国的耳语,请阅读第二段 - http://developer.android.com/reference/android/os/AsyncTask.html – OceanLife 2012-08-15 21:14:54

+0

因此,恕我直言,它听起来你仍然需要保持你的执行产卵线程(你的任务听起来像他们需要一段时间,因此Android的AsyncTask的实现可能不适合),但你仍然可以重新使用上述模式。我认为Android的这一领域必然令人费解,因为您必须考虑并计划要做什么以避免破坏用户体验和/或通过过度热心的资源沉重线程来危害其他活动。让我知道,如果你需要任何更多的帮助/改进,你可能会想到我所概述的方法 – OceanLife 2012-08-20 11:20:34

0

可以锁定方向

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); 

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 

参考https://stackoverflow.com/a/3611554/1008278

+0

我也试过这个解决方案。这有一个问题。它可以完美地从肖像到风景,但反过来它根本不起作用 – 2012-08-15 19:35:53

+0

,当在景观中调用NOSENSOR时,它立即到达肖像 – 2012-08-15 19:52:27

+0

好吧,会找到更好的解决方案,并在这里很快发布 – VenomVendor 2012-08-16 03:57:50