现在是这样一个问题,整个程序就一个Activity,它接受GPS信息,第一次获取到位置的时候启动一个后台线程,该线程是包含UDP服务端和客户端,start之后除非调用自定义的方法exit()否则不会退出。而这个exit方法是在Activity的onDestroy()里面调用的。但是目前发现这样的一个问题,就是,按了home键之后,程序执行了onStop()方法,然后点击程序图标此时会执行onCreate()方法,而不是理想中的onStart()方法。这样再获取到位置之后就会报错,我想应该是Activity被系统回收导致重新create了一个,但是后台线程没有退出,导致端口冲突。
而且最郁闷的是按home键的行为并不是每次都一样的,一般开机第一次肯定会是按了home,再点就是onCreate(),以后随机……
用的机器是摩托的mt710,在模拟器上没有这样的问题,在华为U8220上也有类似问题。
现在我想解决这个问题,请问有没有好的办法呢?
------解决方案--------------------
activity被回收,线程应该会关闭的
添加android:launchMode="singleInstance" 试试。
------解决方案--------------------
Activity被回收,那么它打开的线程会不会关闭
一般的做法是设置标志位
好像是这样
------解决方案--------------------
做下同步,如果onstop了,那就让线程停止
------解决方案--------------------
那你可以在onCreate()判断,如果线程是start状态的,就先stop掉,再重新start
------解决方案--------------------
还有按照常理来说,你按home如果Activity被回收了,也就是整个进程都终止了,应该在这个进程中的线程也会终止的。。。
------解决方案--------------------
在Activity中开的线程是不会因为Activity的关闭而关闭的。
如果你的线程是while(true)循环工作,那么,将true值改成变量控制,要关闭线程,就让变量的值为false,则线程允许即可结束。Java里面线程的结束不能使用stop()方法的,连destroy(),interupt()方法都经常不起作用,并且,这两个方法总会引来多线程问题。所以,对于while(true)执行的线程,通常用改变while条件,来让线程结束运行是最好的方式,不会出错。如果线程不是while(true)执行,那么,线程执行玩所有操作会自动结束的,不用你操心
------解决方案--------------------
你在onResume里面启动,OnPause里面退出,就没有问题了。
如果要一直运行,就做成一个RPC的service吧
------解决方案--------------------
我的工程里面 Activity 销毁了 但是 那个里面的线程 你不调用关闭方法 线程还是会继续
------解决方案--------------------
不会关闭,service不就是一个线程吗,如果没有绑定Activity的话就不会因为Activity的关闭而停止--后台听音乐;
------解决方案--------------------
线程Over
程序的进程没的关