我正在尝试创建一个在后台录制音频的应用。我为此目的使用Service
类。由于我不想阻止UI Thread
,因此我在Service类中创建了HandlerThread
来执行录制操作。但是,当我尝试运行Service
时,我的应用会抛出ANR (Application Not Responding) error
。我无法弄清楚我的UI Thread
是如何被阻止的。另外值得一提的是我创建了一个在我的UI线程上运行的CountUp Timer。
这是我的代码:
public class AudioRecorderService extends Service {
private Looper mLooper;
private AudioRecorderHandler mAudioRecorderHandler;
private MediaRecorder mAudioRecorder;
public AudioRecorderService() {
}
private final class AudioRecorderHandler extends Handler {
private String fileName;
public AudioRecorderHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
fileName = Environment.getDataDirectory().getAbsolutePath() + "/" + "test.mp4";
mAudioRecorder = new MediaRecorder();
mAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mAudioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mAudioRecorder.setAudioEncodingBitRate(256);
mAudioRecorder.setAudioChannels(1);
mAudioRecorder.setAudioSamplingRate(44100);
mAudioRecorder.setOutputFile(fileName);
try {
mAudioRecorder.prepare();
mAudioRecorder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "Recording Started", Toast.LENGTH_LONG).show();
Message msg = mAudioRecorderHandler.obtainMessage();
msg.arg1 = startId;
mAudioRecorderHandler.sendMessage(msg);
return START_REDELIVER_INTENT;
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onCreate() {
android.os.Debug.waitForDebugger();
HandlerThread thread = new HandlerThread("AudioRecorder", Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
mLooper = thread.getLooper();
mAudioRecorderHandler = new AudioRecorderHandler(mLooper);
}
@Override
public void onDestroy() {
if (mAudioRecorder != null) {
mAudioRecorder.stop();
mAudioRecorder.release();
mAudioRecorder = null;
}
Toast.makeText(this, "Recording Done", Toast.LENGTH_LONG).show();
mLooper.quit();
mLooper.getThread().interrupt();
}
}
这是我的错误日志:
06-19 16:22:15.971 509-551/? E/InputDispatcher: channel '41c32190 com.example.vaibhav.phrasesapp/com.example.vaibhav.phrasesapp.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
06-19 16:22:17.025 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.026 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.026 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.026 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.026 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.026 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.026 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.026 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.026 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.026 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.026 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.027 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.027 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.027 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.027 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.027 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.027 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.027 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.027 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.027 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.027 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.028 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.028 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.028 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.028 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.028 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.028 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.028 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.029 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.029 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.029 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.029 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.029 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.029 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.029 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.030 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.030 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.030 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.030 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.030 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.030 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.030 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.030 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.031 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.031 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.031 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.031 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.031 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.031 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.031 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.031 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.031 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.031 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.031 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.032 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.032 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.032 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.032 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:17.032 509-536/? E/FWKEXT: Enter GetCurrentOP
06-19 16:22:19.172 9787-9791/? E/Trace: error opening trace file: No such file or directory (2)
06-19 16:22:19.176 9787-9793/? E/jdwp: jdwp::setsockopt(SO_SNDTIMEO)
06-19 16:22:19.176 9787-9793/? E/jdwp: jdwp::setsockopt(SO_RCVTIMEO)
06-19 16:22:19.264 9797-9797/com.example.vaibhav.phrasesapp E/dalvikvm: Could not find class 'android.util.ArrayMap', referenced from method com.android.tools.fd.runtime.MonkeyPatcher.monkeyPatchExistingResources
06-19 16:22:19.266 9797-9797/com.example.vaibhav.phrasesapp E/dalvikvm: Could not find class 'android.util.ArrayMap', referenced from method com.android.tools.fd.runtime.MonkeyPatcher.pruneResourceCache
06-19 16:22:19.292 9797-9797/com.example.vaibhav.phrasesapp E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.example.vaibhav.phrasesapp.MainActivity.access$super
06-19 16:22:19.295 9797-9797/com.example.vaibhav.phrasesapp E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.example.vaibhav.phrasesapp.MainActivity.access$super
06-19 16:22:19.295 9797-9797/com.example.vaibhav.phrasesapp E/dalvikvm: Could not find class 'android.media.session.MediaController', referenced from method com.example.vaibhav.phrasesapp.MainActivity.access$super
06-19 16:22:19.296 9797-9797/com.example.vaibhav.phrasesapp E/dalvikvm: Could not find class 'android.widget.Toolbar', referenced from method com.example.vaibhav.phrasesapp.MainActivity.access$super
06-19 16:22:19.319 9797-9797/com.example.vaibhav.phrasesapp E/dalvikvm: Could not find class 'android.app.ActivityManager$TaskDescription', referenced from method com.example.vaibhav.phrasesapp.MainActivity.access$super
06-19 16:22:19.333 9797-9797/com.example.vaibhav.phrasesapp E/dalvikvm: Could not find class 'android.app.SharedElementCallback', referenced from method com.example.vaibhav.phrasesapp.MainActivity.access$super
06-19 16:22:19.337 9797-9797/com.example.vaibhav.phrasesapp E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.example.vaibhav.phrasesapp.MainActivity.access$super
06-19 16:22:19.340 9797-9797/com.example.vaibhav.phrasesapp E/dalvikvm: Could not find class 'android.transition.TransitionManager', referenced from method com.example.vaibhav.phrasesapp.MainActivity.access$super
06-19 16:22:19.349 9797-9797/com.example.vaibhav.phrasesapp E/dalvikvm: Could not find class 'android.app.SharedElementCallback', referenced from method com.example.vaibhav.phrasesapp.MainActivity.access$super
06-19 16:22:19.361 9797-9797/com.example.vaibhav.phrasesapp E/dalvikvm: Could not find class 'android.app.assist.AssistContent', referenced from method com.example.vaibhav.phrasesapp.MainActivity.access$super
06-19 16:22:19.368 9797-9797/com.example.vaibhav.phrasesapp E/dalvikvm: Could not find class 'android.view.SearchEvent', referenced from method com.example.vaibhav.phrasesapp.MainActivity.access$super
06-19 16:22:19.374 9797-9797/com.example.vaibhav.phrasesapp E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.example.vaibhav.phrasesapp.MainActivity.access$super
06-19 16:22:27.799 803-1055/? E/CellLocation: create GsmCellLocation
06-19 16:22:27.802 803-1055/? E/CellLocation: create GsmCellLocation
06-19 16:22:28.446 595-595/? E/wpa_supplicant: Sorted scan results
06-19 16:22:28.446 595-595/? E/wpa_supplicant: 00:17:7c:3a:59:56 freq=2437 qual=0 noise=0 level=-66 flags=0xb
06-19 16:22:28.446 595-595/? E/wpa_supplicant: IEs
06-19 16:22:28.446 595-595/? E/wpa_supplicant: 000d2a2a2a2a76697275732a2a2a2a010882848b960c1218240301062a010032043048606c30140100000fac020100000fac020100000fac020000dd180050f2020101000003a4000027a4000042435e0062322f00dd0600e04c020160
06-19 16:22:28.446 595-595/? E/wpa_supplicant: Beacon IEs
06-19 16:22:28.446 595-595/? E/wpa_supplicant: 000d2a2a2a2a76697275732a2a2a2a010882848b960c1218240301060504000100002a010432043048606c30140100000fac020100000fac020100000fac020000dd180050f2020101000003a4000027a4000042435e0062322f00dd0600e04c020160
06-19 16:22:28.446 595-595/? E/wpa_supplicant: e4:f4:c6:43:dc:88 freq=2412 qual=0 noise=0 level=-70 flags=0x2b
06-19 16:22:28.446 595-595/? E/wpa_supplicant: IEs
06-19 16:22:28.447 595-595/? E/wpa_supplicant: 00094e4554474541523238010882848b961224486c0301012a010032040c1830602d1aee1117ffff0000010000000000000000000000000c00000000003d160105060000000000000000000000000000000000000030140100000fac040100000fac040100000fac020000dd180050f2020101000003a4000027a4000042435e0062322f000b05040023127a4a0e14000a002c01c800140005001900dd07000c43070000000706455520010d10dda80050f204104a0001101044000102103b0001031047001038833092309218838e48e4f4c643dc881021000d4e4554474541522c20496e632e1023001d4e45544745415220576972656c6573732041636365737320506f696e74102400064a52363135301042000831323334353637381054000800060050f2040001101100144a52363135302028576972656c6573732041502910080002210c103c0001011049000600372a000120
06-19 16:22:28.447 595-595/? E/wpa_supplicant: d0:92:9e:c7:ce:82 freq=2462 qual=0 noise=0 level=-73 flags=0xb
06-19 16:22:28.447 595-595/? E/wpa_supplicant: IEs
06-19 16:22:28.447 595-595/? E/wpa_supplicant: 001157696e646f77732050686f6e6539373139010882848b960c12182403010b0706494e20010d142a010030140100000fac040100000fac040100000fac02000032043048606c2d1a2c011bff000000000000000000000080000000000000000000003d160b0804000000000000000000000000000000000000004a0e14000a00c800c8001400050019007f080100000000000040dd180050f2020101010003a4000027a4000042435e0062322f00dd0900037f01010000ff7fdd7f0050f204104a0001101044000102103b00010010470010d44ca65da82f4caca8ebd26a3866b85b102100094d6963726f736f66741023000757696e646f77731024000a31302e302e3134333637104200013010540008000a0050f20000001011000d57696e646f77732070686f6e651008000211681049000600372a000120dd080050f21102000000dd0e0050f2122b000600d0929ec7ce80dd31506f9a09020200253b0d2200d0929ec7ce8111e8000a0050f2000000001011000d57696e646f77732070686f6e650e0000
06-19 16:22:28.447 595-595/? E/wpa_supplicant: Beacon IEs
06-19 16:22:28.447 595-595/? E/wpa_supplicant: 001157696e646f77732050686f6e6539373139010882848b960c12182403010b050800010000000000002a010030140100000fac040100000fac040100000fac02000032043048606c2d1a2c011bff000000000000000000000080000000000000000000003d160b0804000000000000000000000000000000000000004a0e14000a00c800c8001400050019007f080100000000000040dd180050f2020101010003a4000027a4000042435e0062322f00dd0900037f01010000ff7fdd350050f204104a00011010440001021049000600372a00012010540008000a0050f20000001011000d57696e646f77732070686f6e65dd080050f21102000000dd0e0050f2122b000600d0929ec7ce80dd12506f9a09020200253b030600d0929ec7ce81
06-19 16:22:28.447 595-595/? E/wpa_supplicant: 0c:d2:b5:46:4d:40 freq=2462 qual=0 noise=0 level=-84 flags=0xb
06-19 16:22:28.447 595-595/? E/wpa_supplicant: IEs
06-19 16:22:28.447 595-595/? E/wpa_supplicant: 00064d756b657368010882848b961224486c03010b2a010432040c1830602d1a6e1117ff000000010000000000000000000000000c00000000003d160b0006000000000000000000000000000000000000003e0100dd1a0050f20101000050f20202000050f2020050f20401000050f202dd180050f2020101000003a4000027a4000042435e0062322f004a0e14000a002c01c8001400050019007f0101dd07000c430400000007064d5820010b10
06-19 16:22:28.447 595-595/? E/wpa_supplicant: Beacon IEs
06-19 16:22:28.447 595-595/? E/wpa_supplicant: 00064d756b657368010882848b961224486c03010b32040c18306007064d5820010b143308200102030405060733082105060708090a0b050400010020dd1a0050f20101000050f20202000050f2020050f20401000050f2022a01042d1a6e1117ff000000010000000000000000000000000c00000000003d160b0006000000000000000000000000000000000000004a0e14000a002c01c8001400050019007f0101dd180050f2020101000003a4000027a4000042435e0062322f00dd07000c4304000000
06-19 16:22:28.447 595-595/? E/wpa_supplicant: 0c:d2:b5:3f:b7:04 freq=2447 qual=0 noise=0 level=-87 flags=0xb
06-19 16:22:28.447 595-595/? E/wpa_supplicant: IEs
06-19 16:22:28.453 595-595/? E/wpa_supplicant: 001041697274656c5f5a65726f746f756368010882848b961224486c0301082a010432040c1830602d1a6e1117ff000000010000000000000000000000000c00000000003d16080406000000000000000000000000000000000000003e0100dd1a0050f20101000050f20202000050f2020050f20401000050f202dd180050f2020101000003a4000027a4000042435e0062322f004a0e14000a002c01c8001400050019007f0101dd07000c430400000007064d5820010b10
06-19 16:22:28.461 595-595/? E/wpa_supplicant: WPS: WFA subelement id=0 len=1
06-19 16:22:28.461 595-595/? E/wpa_supplicant: WPS: WFA subelement id=0 len=1
06-19 16:22:28.461 595-595/? E/wpa_supplicant: WPS: WFA subelement id=0 len=1
06-19 16:22:28.461 595-595/? E/wpa_supplicant: WPS: WFA subelement id=0 len=1
06-19 16:22:28.461 595-595/? E/wpa_supplicant: WPS: WFA subelement id=0 len=1
06-19 16:22:28.461 595-595/? E/wpa_supplicant: WPS: WFA subelement id=0 len=1
06-19 16:22:49.020 509-528/? E/ANRManager: writeStringToFile error: /sys/module/mlog/parameters/do_mlog java.io.FileNotFoundException: /sys/module/mlog/parameters/do_mlog: open failed: ENOENT (No such file or directory)
06-19 16:22:49.033 509-528/? E/ANRManager: writeStringToFile error: /sys/kernel/debug/tracing/tracing_on java.io.FileNotFoundException: /sys/kernel/debug/tracing/tracing_on: open failed: ENOENT (No such file or directory)
06-19 16:22:49.034 509-528/? E/ANRManager: writeStringToFile error: /sys/kernel/debug/binder/transaction_log_enable java.io.FileNotFoundException: /sys/kernel/debug/binder/transaction_log_enable: open failed: ENOENT (No such file or directory)
06-19 16:22:49.035 509-528/? E/ANRManager: writeStringToFile error: /sys/module/mlog/parameters/timer_intval java.io.FileNotFoundException: /sys/module/mlog/parameters/timer_intval: open failed: ENOENT (No such file or directory)
06-19 16:22:50.830 509-528/? E/ANRManager: ANR in com.example.vaibhav.phrasesapp
Reason: Executing service com.example.vaibhav.phrasesapp/.AudioRecorderService
Load: 6.93 / 8.93 / 20.67
Android time :[2016-06-19 16:22:50.828] [54834.406]
CPU usage from 16261ms to 0ms ago:
2% 158/adbd: 0.4% user + 1.5% kernel / faults: 1122 minor
0.7% 9563/kworker/0:2: 0% user + 0.7% kernel
0.5% 9653/logcat: 0.2% user + 0.3% kernel
0.3% 509/system_server: 0.3% user + 0% kernel / faults: 43 minor
0.3% 45/bat_thread_kthr: 0% user + 0.3% kernel
0.1% 601/com.android.systemui: 0.1% user + 0% kernel / faults: 14 minor
0.1% 881/com.cleanmaster.boost:service: 0.1% user + 0% kernel / faults: 1 minor
0.1% 53/disp_config_upd: 0% user + 0.1% kernel
0.1% 133/surfaceflinger: 0% user + 0% kernel / faults: 4 minor
0.1% 9797/com.example.vaibhav.phrasesapp: 0% user + 0% kernel / faults: 11 minor
0% 54/mmcqd/0: 0% user + 0% kernel
0% 65/mt_gpufreq: 0% user + 0% kernel
0% 595/wpa_supplicant: 0% user + 0% kernel / faults: 1 minor
0% 665/com.android.phone: 0% user + 0% kernel / faults: 8 minor
0% 4987/com.google.android.apps.maps: 0% user + 0% kernel / faults: 1 minor
0% 7872/kworker/0:0: 0% user + 0% kernel
3.6% TOTAL: 1% user + 2.6% kernel
06-19 16:22:50.832 509-528/? E/ActivityManager: get crashInfo fail.
任何人都可以帮忙?????
答案 0 :(得分:0)
在路径上创建文件,然后将其传递给播放器
File root = new File(Environment.getDataDirectory().getAbsolutePath() + "/" + "recordings");
if (!root.exists()) {
root.mkdirs();
}
fileName = root.getPath().toString();
如果您正在针对API 23(6.0)进行编译,那么您还可以获得运行时权限。
答案 1 :(得分:0)
“android.os.waitForDebugger()”是什么意思?它将睡眠你的线程(你的主线程),直到附加调试器。
我认为这是问题所在。