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

时间:2015-01-19 17:55:51

标签: android uri oncreate

我有一个应用程序的活动可能会也可能不会加载流媒体MP3。我正在使用精彩的AudioWife库来实现这一目标。但是,这会在打开活动时导致非常明显的延迟。这在较慢的设备或连接上非常烦人(屏幕有时甚至会变黑,持续几秒钟)。当没有流式mp3时,不会发生延迟。延迟不是由AudioWife专门引起的,因为我之前使用的代码导致相同的延迟。

问题显然是我正在加载URI onCreate(),因此活动会一直等到检索到长度等元信息。

这是我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());
    [...]
}

我希望在创建活动后重启(加载mp3),以防止活动冻结。

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

说这个,我建议你简单地以任意的初始延迟启动AsyncTask