安卓线程问题,也是java的....
澳门美高梅官网
澳门美高梅官网
当前位置 : 澳门美高梅官网 > 美高梅娱乐

安卓线程问题,也是java的....

学java不是很久,还没完全掌握一些东西的精髓,所以问一下:如代码,我每播放一首歌,这个线程都会新开一个来反馈播放进度,假设,我不停切歌,那产生的线程会自动被杀吗?

还是说有什么办法也随着换歌的时候,中断线程呢?

一般怎么处理这种产生很多线程的情况?

new Thread {

                        @Override
                        public void run {

                            while true {

                                try {
                                    sleepmillis;
                                } catch InterruptedException e {
                                    e.printStackTrace;
                                }
                                if player != null && player.isPlaying {

                                    mListener.onPlayingplayer.getCurrentPosition, player.getDuration;
                                }

                            }

                        }

                    }.start;

======================================

经过最佳答案的提醒:用一个外在的线程监听player的播放进度就可以了,也不用wait,notify线程.....也就是把上面的代码线程提出来在外面写,反正player是全局的。

重复的启动销毁线程将会消耗很多资源,并不是合理的设计方式,
目标是为了监听反馈的播放进度,为什么一定需要每次都新开一个线程呢?
下面这种方式更为合理一些

  1. 新开一个线程,专门负责监听,正常状况下是wait住,如果有消息需要监听就监听。这里需要继承Thread重写run方法

  2. 每次新开一个歌曲时候,notify监听线程,并将新的player传递过去,即可重新监听

模仿下runloop 或者开源框架 用事件来做http://blog.ibireme.com/2015/05/18/runloop/

线程不会自动被杀,需要手动清除,由于Thread.stop早已被deprecated,现在一般用interrupt来结束线程。
如你的代码。把try-catch扩大到整个while循环。
然后如果你要停止线程,在需要停止的时候调用thread.interrupt即可。
供参考。

public void run {
    try {
        while !Thread.interrupted {
     
            sleepmillis;
            
            if player != null && player.isPlaying {

                mListener.onPlayingplayer.getCurrentPosition, player.getDuration;
            }
        }  
    } catch InterruptedException e {
        //添加退出前的处理
    } catch Exception e {
        //如果是在I/O操作时被中断,抛出的异常会不一样,但也视为interrupted,添加退出前的处理
        //两个catch可以合并
    }
}

java中最好干掉线程的方法我认为就是让它运行完成,你可以设置一个boolean 值只有为ture的时候才继续运行下去.

栏目列表

广告位

澳门美高梅官网