我得到主Activity
,按下按钮启动其他名为Getter的类,并且Getter类创建1-60 000个线程(执行网络内容),因此它们需要一些时间才能完成。我的问题是,当我在那些线程运行时旋转我的设备时,我的程序停止正常工作。在我的主Activity中,我有一个处理程序,每2秒从Getter类中获取一个数组,然后将这些值放入本地数组列表。
我尝试了这个解决方案:
Background task, progress dialog, orientation change - is there any 100% working solution?
但发现它非常复杂。所以现在我想知道我的问题是否有任何其他解决方案。例如,即使我的方向发生变化,我的线程还能继续在后台运行吗?如果那是不可能的,我可以以编程方式将方向锁定到按下按钮之前的方向,然后等待线程完成然后再次使方向与传感器一起使用吗?
答案 0 :(得分:0)
你可以锁定方向
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
答案 1 :(得分:0)
我们处理此问题的方法是从粘性app.Service
启动异步任务,并允许异步任务与父服务进行通信,而父服务又通过BroadcastReceiver框架与任何收听它的广播事件的人进行通信。我已经走了一段时间来描述这种机制here。
在方向更改时,您的app.Activity
将被销毁,但后台服务将不会被销毁(可能是onLowMemory
&无数其他情况,但可能不会)。在重新创建活动时,您可以通过我发布的here解决方案检查您的服务是否仍在运行。根据该结果,您可以决定如何处理用户界面,重新显示/重新添加进度对话框等,并重新注册接收方以收听服务中发出的事件。
这些层之间的职责是这样的;
Intents
)报告它是什么以及何时完成stopSelf()
)具有离散非融合角色的3个元素。这就是我们喜欢它的方式。这种方法的唯一细微差别是使用BroadcastReceivers
。如果你对这些感到满意,那么你就是金色的。