Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一旦这个线程完成,它在最后运行时会发生什么情况?_Java_Android_Multithreading_Android Handler - Fatal编程技术网

Java 一旦这个线程完成,它在最后运行时会发生什么情况?

Java 一旦这个线程完成,它在最后运行时会发生什么情况?,java,android,multithreading,android-handler,Java,Android,Multithreading,Android Handler,我有一个从服务器下载一些图像的线程。因此,一旦它下载了图像,我就调用处理程序并进行UI更新。因此,由于thread的stop()已被弃用,我无法使用它。我这里有两个问题 这个线程到底发生了什么?(意思是在我调用handler方法之后它发生了什么) 或者如何在不使用stop()的情况下停止此线程 这是我的密码 handler=new Handler() { public void handleMessage(Message msg) {

我有一个从服务器下载一些图像的线程。因此,一旦它下载了图像,我就调用处理程序并进行UI更新。因此,由于thread的stop()已被弃用,我无法使用它。我这里有两个问题

  • 这个线程到底发生了什么?(意思是在我调用handler方法之后它发生了什么)
  • 或者如何在不使用stop()的情况下停止此线程
  • 这是我的密码

    handler=new Handler()
        {
            public void handleMessage(Message msg)
            {
                if(msg.what==0)
                {
                    //UI Updation takes place. 
                }
            }
        };
    
    
    
    final Thread t = new Thread(new Runnable() {
            public void run() {
                Log.i("Inside Thread", "Downloading Images...");
                         myDownlaodMethod();
                handler.sendEmptyMessage(0);
            }
        });
        t.start();
    

    线程将结束并自行消亡。你不必自己结束它。如果不创建新的
    线程
    对象,您将无法重新启动它。垃圾收集器将处理任何需要释放的内存。只要您持有对该对象的引用,该对象就会保留在内存中。删除引用,垃圾收集器将像删除其他对象一样删除该对象。

    您应该查看和


    如果它与普通java相同,那么它提供了一些强大的线程管理,包括同时关闭所有线程。如何在Android中执行如果它有一个永久循环,则必须有一个布尔条件,如

    ,而(a){//do everything}
    ,并在希望它死亡时将
    a
    设置为false。如果您的
    myDownloadMethod()
    无法被中断和取消,那么您必须创建一个或有一个超时,让它死掉。你不应该只在执行的过程中切断一个线程。最佳实践是让它一直运行到最后。通常,您可以使用
    Thread.interrupt()
    来实现此目的。感谢您的澄清。@DeeV查看ExecutorService和Executors。我经常看到开发人员重新实现这些类所做的事情。这看起来可能会对此有所帮助。这可能是
    AsyncTask
    所包含的内容,因为它的工作原理类似。他使用的是Android,所以AsyncTask可能比执行器更合适。按照您的建议,使用
    interrupt
    关闭线程并不简单,因为必须修改线程才能正确处理中断。@totototo2是的,我同意。然而,任何东西都比普通的线好。你应该用AsyncTask发布一个答案(当时我还不知道)。