好的,所以我在玩了一下Android SDK之后,我决定开发一个完整的应用程序。不一定要在商店上发布(我不是真的有我可以使用的工具来做正确的QA,所以感觉不对;我只能在我的个人设备上测试)它主要只是一个个人项目的乐趣和学习。最后,我决定使用相机应用程序,因为我经常使用相机,所以它是我最终实际使用的那种应用程序,如果我制作它也是因为我对新的Camera2 API的功能感到非常兴奋Android L并希望尝试一下。
无论如何,我一直在思考应用程序的设计/体系结构,我遇到了一个我无法真正解决的潜在问题,因为我不仅不熟悉这种性质的GUI编程,而且还不是100%使用Java和Android SDK。他们都坐在我的日常工作范围之外。
现在我已经足够了解我真的需要将我的UI线程与其他所有内容分开,但我不确定的是首先,我应该投入额外的线程(我当时正在考虑处理图像捕获和存储)和另一个处理设置?也许就是这样做了)以及是否有后台线程,UI线程通过事件与之通信,或者只是在需要时产生线程。也许是一个中间后台线程,它在UI线程和需要完成的任何后台处理之间进行仲裁?我的意思是,我该如何决定这些事情?是否有一般/最佳做法?
我真的在问,因为我想要妥善完成这项工作并事先彻底规划好应用程序,因为过去我发现如果我只是潜入,我很容易感到困惑并最终失去信心放弃项目。我希望有人可以提供帮助。这不是一个我发现容易用Google表示会提供令人满意的结果的问题。
答案 0 :(得分:2)
我想你可能会考虑这样思考:
UI线程是大多数东西运行的地方。它偶尔也被称为“主”线程,因为它是,呃...主线程。
除非你的程序非常复杂,否则你可能不需要担心线程的架构。所有你需要担心的是慢慢的东西关闭 UI线程。而已。你不关心他们去哪里,只关心UI线程。
如果你购买它,有一些漂亮的选择:
但在任何一种情况下,您并不关心任务运行的线程。您制定了一个关于在目标设备上有意义的线程数的策略,然后在其中一个上运行缓慢的东西。
...和“slow”应包括所有I / O:数据库,文件系统,网络等,以及主要计算。
答案 1 :(得分:1)
您希望尽可能简化事情。您不需要线程来设置设置,也不需要中间线程。这些事情只会造成不必要的复杂化。您只需要从UI线程中执行长时间运行操作。
了解Android框架提供的结构,以便首先使多线程更容易。这有助于简化您的应用程序。这些包括IntentService和AsyncTask。如果这些不符合您的需求,请查看java.util.concurrent包。通常不建议使用原始线程。
另一个可以派上用场的图书馆是Event Bus like Otto。这将防止使用AsyncTask时可能发生的内存泄漏。
答案 2 :(得分:1)
在图像捕获方面,您不必担心线程。想要拍照时,可以通过在设备上打开相机应用程序来拍照。 Here是一种很好的方式。
Android SDK提供了Asynctask,它可以在后台线程中为您完成任务,就像网络调用一样,并在完成后更新UI。
您还可以使用IntentService,即使您退出应用并执行上传/下载等操作,也无需用户担心。当基础数据经常更改并且您需要快速更新UI(例如,在自动填充文本中搜索联系人)时,Loaders非常有用。
http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html
参考本教程,这是一个好的开始。希望这会有所帮助。