Android 离线唤醒导致程序退出
Ta的回复 :我追踪一下,通过百度在 native 层的 log, 我推测百度在开启离线唤醒和离线识别时,在同一进程不同线程,分别通过 JNI 传入不同的 JNIEnv . 请看下面的 log: 1888 64890 08-02 01:12:17.566 W/dalvikvm( 901): JNI WARNING: threadid=37 using env from threadid=1 1889 64892 08-02 01:12:17.567 W/dalvikvm( 901): in Lcom/baidu/speech/easr/easrJni;.bdeasrRec:()I (FindClass) 1890 64894 08-02 01:12:17.567 I/dalvikvm( 901): "AbsStreamDecoder #1" prio=5 tid=37 NATIVE 1891 64896 08-02 01:12:17.567 I/dalvikvm( 901): | group="main" sCount=0 dsCount=0 obj=0x41c0f908 self=0x56ef9810 1892 64898 08-02 01:12:17.568 I/dalvikvm( 901): | sysTid=1730 nice=0 sched=0/0 cgrp=apps handle=1413418752 1893 64900 08-02 01:12:17.568 I/dalvikvm( 901): | state=R schedstat=( 7878021636 17564962035 12639 ) utm=760 stm=27 core=0 1894 64902 08-02 01:12:17.568 D/dalvikvm( 901): dump native stack for : AbsStreamDecoder #1 1895 64904 08-02 01:12:17.568 D/dalvikvm( 901): unwind backtrace 1896 64918 08-02 01:12:17.630 D/dalvikvm( 901): get native symbol 1897 64920 08-02 01:12:17.631 D/dalvikvm( 901): format backtrace line 1898 64922 08-02 01:12:17.631 I/dalvikvm( 901): #00 pc 000012a0 /system/lib/libcorkscrew.so (unwind_backtrace_thread+27) 1899 64924 08-02 01:12:17.631 I/dalvikvm( 901): #01 pc 00061692 /system/lib/libdvm.so (dvmDumpNativeStack(DebugOutputTarget const*, int)+53) 1900 64926 08-02 01:12:17.631 I/dalvikvm( 901): #02 pc 00054fa4 /system/lib/libdvm.so (dvmDumpThreadEx(DebugOutputTarget const*, Thread*, bool)+355) 1901 64928 08-02 01:12:17.631 I/dalvikvm( 901): #03 pc 00055052 /system/lib/libdvm.so (dvmDumpThread(Thread*, bool)+25) 1902 64930 08-02 01:12:17.631 I/dalvikvm( 901): #04 pc 00039402 /system/lib/libdvm.so 1903 64932 08-02 01:12:17.631 I/dalvikvm( 901): #05 pc 00042128 /system/lib/libdvm.so 1904 64934 08-02 01:12:17.631 I/dalvikvm( 901): #06 pc 000021ce /data/app-lib/com.tuling.demo-2/libhci_sys_jni.so (android_sigaction(int, siginfo*, void*)+21) 1905 64936 08-02 01:12:17.631 D/dalvikvm( 901): get native done 1906 64938 08-02 01:12:17.631 I/dalvikvm( 901): at com.baidu.speech.easr.easrJni.bdeasrRec(Native Method) 1907 64940 08-02 01:12:17.631 I/dalvikvm( 901): at java.lang.reflect.Method.invokeNative(Native Method) 1908 64942 08-02 01:12:17.631 I/dalvikvm( 901): at java.lang.reflect.Method.invoke(Method.java:525) 1909 64944 08-02 01:12:17.631 I/dalvikvm( 901): at com.baidu.speech.easr.EasrFactory$1.invoke(EasrFactory.java:92) 1910 64946 08-02 01:12:17.631 I/dalvikvm( 901): at $Proxy1.bdeasrRec(Native Method) 1911 64948 08-02 01:12:17.631 I/dalvikvm( 901): at com.baidu.speech.easr.EmbeddedASREngine.recognize(EmbeddedASREngine.java:805) 1912 64950 08-02 01:12:17.631 I/dalvikvm( 901): at com.baidu.speech.OfflineDecoder.onExecute(OfflineDecoder.java:96) 1913 64952 08-02 01:12:17.631 I/dalvikvm( 901): at com.baidu.speech.MergedDecoder.onExecute(MergedDecoder.java:210) 1914 64954 08-02 01:12:17.631 I/dalvikvm( 901): at com.baidu.speech.AbsStreamDecoder$Task.call(AbsStreamDecoder.java:139) 1915 64956 08-02 01:12:17.631 I/dalvikvm( 901): at com.baidu.speech.AbsStreamDecoder$Task.call(AbsStreamDecoder.java:100) 1916 64958 08-02 01:12:17.631 I/dalvikvm( 901): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 1917 64960 08-02 01:12:17.631 I/dalvikvm( 901): at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:153) 1918 64962 08-02 01:12:17.631 I/dalvikvm( 901): at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267) 1919 64964 08-02 01:12:17.631 I/dalvikvm( 901): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 1920 64966 08-02 01:12:17.631 I/dalvikvm( 901): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 1921 64968 08-02 01:12:17.631 I/dalvikvm( 901): at java.lang.Thread.run(Thread.java:838) 1922 64970 08-02 01:12:17.632 I/dalvikvm( 901): 1923 64972 08-02 01:12:17.632 E/dalvikvm( 901): VM aborting