AsyncTaskなどを使用する以外に方法はありません。その理由は、実際のレンダリングが非同期で行われないためです。つまり、setContentViewは一部のデータのみを設定しますが、その時点では何も表示されません。
ただし、AsyncTaskは、必ずしも「長い」計算を目的としているわけではありません。ただし、アプリが結果に依存していて、他の計算が並行して行われない場合でも、目的を達成するための最も簡単な方法である可能性があります。そうでない場合でも、スレッドを使用する必要がある場合があります。
更新誰もがさまざまな品質のAsyncTaskの回答をより多く使用して元のポスターを攻撃し続けているので、 OPが彼の計算に実際にかかる時間については何も示されていません。また、AsyncTaskは、1回だけ実行できるワンショットのみのオブジェクトです。
考慮すべきもう1つの非常に重要な点は次のとおりです。Androidは、AsyncTaskにバックグラウンドタスクの優先順位を割り当てます。つまり、Androidは、10%のCPUサイクルという人為的な制限でバックグラウンド優先度を持つすべてのタスクを実行するため、低いスケジューリング優先度に加えて、AsyncTaskでの計算はフォアグラウンドで実行された場合の10倍の時間がかかります。ただし、AsyncTasksは、優先度を「少しだけ」上げることで、このグループから除外できます。AsyncTaskの場合、次のように実行されます。
public R doInBackground(I... is) {
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND +
Process.THREAD_PRIORITY_MORE_FAVORABLE);
...
}