程序结构如下:一个Activity,一个Service,使用bindService启动服务,Service使用Socket连接外边的服务器,成功后,使用finish关掉Activity。此Activity实现一个接口,这个接口有一个函数,参数是一个字串。Service接收到数据后,呼叫这个函数(之前,Service保存了Activity的指针,方法是Service也实现了一个接口,其中一个函数参数就是Activity实现的接口类型,这样,Service启动成功后,Activity通过这个函数把this传给Service)。因为是异步调用,Activity使用了消息机制响应收到的字串。现在Activity使用finish退出,实际上,Service还在,虽然Service的onDestroy确实已经被调用了,Service里的Socket接收线程也还在,实际上接收一切正常,使用Log.d可以看到。那么Service呼叫Activity的那个函数呢,通过Log.d可以看到,也正常呼叫,在往下,实际上消息也运行正常。结果就是Activiy看不到了,但是奶奶的一切还在正常运行。
Java是这样的,刚弄的时候非常不习惯。还有Service确实没必要,除非你要单独运行Service,否则,线程解决一切问题,实际上一个程序是可以不启动任何Activity的,那么,无界面的程序仍然无需用Service,我一直疑问,什么东西必须用Service。但是我仍然认为Android程序不退出,是个不会的设计,实际上现在很多程序都设置了退出菜单,事实表明,自动内存管理不是很好。而且那个什么增加启动速度的理由非常扯淡,那些不驻留的程序慢吗?一点都不慢。