Lis*_*nne 8 java android android-activity
我的Activity onCreate()执行需要一些时间的长计算.
在同一个onCreate()我打电话setContentView()来设置活动的外观.
关键在于,由于执行上述计算需要一段时间,因此活动的屏幕仅在很长时间后加载.
请问有关如何避免这种情况的任何建议?
我曾试着打电话给setContentView()在onCreate()开始在计算中onResume(),但同样的活动画面仅在最后加载.
cla*_*ker 20
除了使用例如AsyncTask之外别无他法.原因是实际渲染不是异步发生的; 换句话说,setContentView只会设置一些数据,但在那个时间点什么都不会显示.
然而,AsyncTask不一定意味着"长"计算.但是,如果您的应用程序依赖于结果,并且没有其他计算并行发生,那么它可能仍然是您实现所需内容的最简单方法.如果没有,您可能必须使用线程甚至.
更新由于每个人都在更多地使用各种质量的AsyncTask答案来轰炸原始海报,我想再次强调AsyncTask用于短操作(引用参考:最多几秒)而OP有鉴于没有对他的计算真的多久指示.此外,AsyncTask是一个只能运行一次的一次性对象.
另一个需要考虑的重点是以下几点.Android为AsyncTask分配后台任务优先级.这意味着,除了较低的调度优先级之外,AsyncTask中的计算将花费十倍于在前台执行的计算,因为Android运行具有后台优先级且具有10%CPU周期的人为限制的所有任务.但是,AsyncTasks可以通过提高"优先级"来提升其优先级.对于AsyncTask,它将像这样完成:
public R doInBackground(I... is) {
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND +
Process.THREAD_PRIORITY_MORE_FAVORABLE);
...
}
Run Code Online (Sandbox Code Playgroud)