我有一个应用程序的活动可能会也可能不会加载流媒体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()
,应用程序不会崩溃,但延迟仍然存在。
提前致谢。
答案 0 :(得分:0)
假设您在AsyncTask
中开始onCreate()
,您仍会看到延迟,因为onPostExecute()
中任务执行的操作将在UI线程上排队,这意味着它将与UI内容并发。
说这个,我建议你简单地以任意的初始延迟启动AsyncTask
。