unissoft-bj / ihostsvc

system services & data services on ihost
0 stars 0 forks source link

Service 运行机制? #112

Open iandygit opened 9 years ago

iandygit commented 9 years ago

通过创建一个可以随系统启动的service,在service中增加IsRunning和IsRecording标识, 在其中的onCreate方法中,启动Running线程,此时IsRunning为true,当在Lib中或后来启动的Activity中接收到Recording指令时,IsRecording更新为true,录音开始。

因为是Bind的Service,在Activity被意外终止时,Service会自动重新启动,此时线程正常。可以实现我们的要求。

但由于是启动的新线程,当Service被系统管理程序强行终止后,进程不能正常退出,会造成系统录音重复。 此问题尚未有合适的解决方案,请尹总帮忙确认。

michaelyin commented 9 years ago

你的描述不是很清楚。约个时间讨论一下。

iandygit commented 9 years ago
  1. 创建一个流程图
  2. 在onDestroy中处理线程,做清理工作
  3. 在Activity与Service通信的过程中,注意通知状态的持久化
  4. 禁用Activity的自动旋转屏幕
iandygit commented 9 years ago

经测试,结合合理的逻辑处理之后,系统可控性得到很大提升。

  1. 在Service停止后,能够正常终止线程,以保证不会重复执行录音操作。
  2. Activity被意外终止后,不像android文档所描述的那样,service不会停止,而是重新启动;尽管在Activity退出之后做了相应的处理,给service发了通知,还是不能重新开启;
  3. 下一步需要给Service和Activity设置持久化的参数,以保证service不论何时重启,都按当前的状态处置;
  4. 在Service增加状态查询的消息,以便Activity与之可以正常通讯。
  5. 流程图暂时不画了。
unissoft-bj commented 9 years ago

开始录音时 出错 07-26 10:06:13.819 11872-11894/? E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-1069 java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord. at android.media.AudioRecord.startRecording(AudioRecord.java:515) at net.wyun.wmrecord.MessengerService.startRecord(MessengerService.java:272) at net.wyun.wmrecord.MessengerService.access$100(MessengerService.java:30) at net.wyun.wmrecord.MessengerService$1$1.run(MessengerService.java:180) at java.lang.Thread.run(Thread.java:838)