请教关于VideoView ANR 问题
本人工作需要,要实现一功能:
1. listview下切换焦点时,快速切换且播放不同的MP4文件。
问题:
1,当快速移动焦点时,要不断的stop/start mp4文件,此时会相当容易出现ANR问题,如果不播放MP4文件就没有问题。
本人实现方式如下:
1. 在listView.setOnItemClickListener下用handler.post方式去切换播放MP4视频。
handler实现如下:
final Handler Mp4PlayHander = new Handler();
final Runnable Mp4PlayResults = new Runnable() {
public void run() {
System.out.println("Runnable Mp4PlayResults");
video1.stopPlayback();
playVideo("/storage/external_storage/sdcard1/video/a.mp4");
}
};
private void playVideo(String path) {
video1.setVideoPath(path);
video1.start();
}
Logcat 打印如下(log看CPU没有100%负荷,所以说估计是阻塞了..... ):
01-02 10:33:59.140 492-523/? I/InputDispatcher: Application is not responding: AppWindowToken, It has been 5238.0ms since event, 5004.4ms since wait started. Reason: Waiting because the focused window has not finished processing the input events that were previously delivered to it.
01-02 10:33:59.140 492-523/? I/WindowManager: Input event dispatching timed out sending to com.seleuco.mame4droid/com.seleuco.mame4droid.MAME4droid. Reason: Waiting because the focused window has not finished processing the input events that were previously delivered to it.
01-02 10:34:01.450 492-506/? E/ActivityManager: ANR in com.abc.mainactivity
PID: 632
Reason: Input dispatching timed out (Waiting because the focused window has not finished processing the input events that were previously delivered to it.)
Load: 1.71 / 0.57 / 0.2
CPU usage from 12900ms to 1440ms ago:
33% 632/com.abc.mainactivity: 26% user + 6.7% kernel / faults: 658 minor
18% 492/system_server: 16% user + 2% kernel / faults: 2093 minor
9.1% 136/mediaserver: 4.9% user + 4.1% kernel / faults: 418 minor
4.9% 133/surfaceflinger: 2% user + 2.9% kernel / faults: 8 minor
2% 145/adbd: 0% user + 2% kernel / faults: 14 minor
1.3% 475/logcat: 0.4% user + 0.8% kernel
1.1% 30/kworker/0:1: 0% user + 1.1% kernel
0.7% 1219/kworker/3:2: 0% user + 0.7% kernel
0% 66/kthread_di: 0% user + 0% kernel
0.1% 70/kthread_h265: 0% user + 0.1% kernel
0.1% 111/avnftl6: 0% user + 0.1% kernel
0% 8/rcu_preempt: 0% user + 0% kernel
0% 71/kworker/u8:1: 0% user + 0% kernel
0% 94/kworker/u8:3: 0% user + 0% kernel
0% 479/aml_buf_toggle: 0% user + 0% kernel
0% 761/com.android.phone: 0% user + 0% kernel / faults: 7 minor
0% 781/com.amlogic.SubTitleService: 0% user + 0% kernel / faults: 32 minor
0% 953/usbtestpm: 0% user + 0% kernel
35% TOTAL: 25% user + 9% kernel + 0% iowait + 0.1% softirq
CPU usage from 1657ms to 2173ms later:
37% 632/com.abc.mainactivity: 31% user + 5.5% kernel / faults: 22 minor
18% 902/emulatorNativeV: 16% user + 1.8% kernel
14% 837/emulatorNativeM: 12% user + 1.8% kernel
1.8% 830/Thread-24: 0% user + 1.8% kernel
1.8% 856/Thread-31: 0% user + 1.8% kernel
1.8% 857/Thread-32: 0% user + 1.8% kernel
+0% 1429/Thread-210: 0% user + 0% kernel
+0% 1430/Thread-211: 0% user + 0% kernel
+0% 1431/Thread-212: 0% user + 0% kernel
+0% 1432/Thread-213: 0% user + 0% kernel
+0% 1433/Thread-214: 0% user + 0% kernel
+0% 1434/Thread-215: 0% user + 0% kernel
+0% 1435/Thread-216: 0% user + 0% kernel
+0% 1436/Thread-217: 0% user + 0% kernel
+0% 1437/Thread-218: 0% user + 0% kernel
+0% 1438/Thread-219: 0% user + 0% kernel
5.6% 492/system_server: 1.8% user + 3.7% kernel
5.6% 506/ActivityManager: 3.7% user + 1.8% kernel
1.3% 30/kworker/0:1: 0% user + 1.3% kernel
1.5% 136/mediaserver: 1.5% user + 0% kernel
1.5% 136/mediaserver: 0% user + 1.5% kernel
1.5% 145/adbd: 0% user + 1.5% kernel
1.5% 148/adbd: 0% user + 1.5% kernel
17% TOTAL: 12% user + 4.2% kernel
请教这种问题如何解决,是否说实现方法不对,个人认为不断的start/stop MP4文件的函数会阻塞其它进程,如会阻塞按键 KEY等,现在我这边没法解决,,,求解决,谢谢啊