通过在创建 activity 后加载 URI 来提高性能

Improving performance by loading URI after activity is created

我有一个带有 activity 的应用程序可能会或可能不会加载流式 MP3。我正在使用出色的 AudioWife 库来执行此操作。但是,当 activity 打开时,这会导致非常明显的延迟。这在较慢的设备或连接上非常烦人(屏幕有时甚至会变黑几秒钟)。当没有流式 mp3 时,不会发生延迟。延迟不是由 AudioWife 引起的,因为我之前使用的代码导致了相同的延迟。

问题显然是我正在加载一个 URI onCreate(),所以 activity 一直等到它检索到诸如长度之类的元信息。

这是我的部分onCreate()

if (showMusic){
    LinearLayout musicContainer = (LinearLayout) findViewById(R.id.MusicContainer);
    musicContainer.setVisibility(View.VISIBLE);
    Uri uri = Uri.parse(mixLink);
    AudioWife.getInstance().init(getApplicationContext(), uri)
    .useDefaultUi(musicContainer , getLayoutInflater());
    [...]
}

我希望在创建 activity 之后开始繁重的工作(加载 mp3),以防止 activity 冻结。

我已经尝试将上面的代码放入 ASyncTask 中,但无济于事,因为导致问题的行 (init()) 需要在图形线程上 运行。如果我将部分代码放在 doInBackground() 中,应用程序就会崩溃。如果我将那部分代码放入 onPostExecute() 应用程序不会崩溃,但延迟仍然存在。

提前致谢。

假设您在 onCreate() 开始 AsyncTask,您仍然会看到延迟,因为 onPostExecute() 中的任务执行的操作将在 UI 线程,这意味着它将与 UI 东西并发。

说到这里,我建议您简单地以任意初始延迟启动 AsyncTask