2011-12-31 116 views
2

我正在做一个项目,我需要显示主页,当主页显示,之后或继续3到5秒,我的其他欢迎自定义对话框显示。但做到这一点,下面的错误发生,但我的应用程序不会停止工作.. LogCat显示这些错误。 应用代码:不支持弃用的线程方法不支持

final Dialog d=new Dialog(Main.this); 
    d.setContentView(R.layout.SplashScreen); 
    Thread splashTread = new Thread() { 
     @Override 
     public void run() { 
      try { 
       d.show(); 

       int waited = 0; 
       while(_active && (waited < _splashTime)) { 
        sleep(100); 
        if(_active) { 
         waited += 100; 
        } 
       } 
      } catch(InterruptedException e) { 
       // do nothing 
      } finally { 
       d.cancel(); 
        stop(); 
      } 
     } 
    }; 
    splashTread.start(); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     _active = false; 
    } 
    return true; 
} 

在logcat的错误:

12-30 14:54:54.044: E/global(1232): Deprecated Thread methods are not supported. 
12-30 14:54:54.044: E/global(1232): java.lang.UnsupportedOperationException. 
12-30 14:54:54.044: E/global(1232):  at java.lang.VMThread.stop(VMThread.java:85) 
12-30 14:54:54.044: E/global(1232):  at java.lang.Thread.stop(Thread.java:1280) 
12-30 14:54:54.044: E/global(1232):  at java.lang.Thread.stop(Thread.java:1247) 
12-30 14:54:54.044: E/global(1232):  at com.droidnova.android.SplashScreen$1.run(SplashScreen.java:35) 

回答

11

在Android中它能够更好地使用Handler用于管理ThreadRunnables

创建一个处理程序实例

Handler handler = new Handler(); 

创建一个可运行的线程

Runnable runnable = new Runnable() { 

     @Override 
     public void run() { 
      Log.d("runnable started", "inside run"); 
      handler.removeCallbacks(runnable); 
      handler.postDelayed(runnable, 1000); 
     } 
    }; 

而且使用处理器

handler.postDelayed(runnable, 1000); 

开始了Runnable,并停止了Runnable使用

handler.removeCallbacks(runnable); 
+0

谢谢..它的工作..谢谢先生。 – Dharmik 2011-12-31 07:12:46

+0

我使用处理程序从外面..在放入run()方法时它显示runnable不会被初始化错误 – Dharmik 2011-12-31 07:15:51

+0

你必须在顶部声明Handler作为全局并使用它。 – 2011-12-31 07:17:32

1

此链接告诉你到底是什么问题,以及如何解决它:

What is this log, when I coded thread.stop()?

Thread.stop是不推荐使用的API,在Android中支持弃用的线程方法不是 。因此它抛出了一个 UnsupportedOperationException。

答案不是使用Thread.stop - 以更优雅的方式关闭 的线程,例如通过设置线程 定期检查的标志。

这个环节讨论为什么使用Thread.stop()已被弃用(不久前在弃用Java的,不只是Android的!):

http://docs.oracle.com/javase/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html

1

将做到这溅最好的方法屏幕

int SPLASH_TIME = 1300; 
    Handler HANDLER = new Handler(); 

        // thread for displaying the SplashScreen 
        HANDLER.postDelayed(new Runnable() { 
         @Override 
         public void run() { 
         finish(); 
         startActivity (new Intent(getApplicationContext(),Alpha.class)); 
         } 
         }, SPLASH_TIME); 
+0

请注意,此方法可能会导致一些Android设备中的链接http://stackoverflow.com/a/20905954/361100的问题。 – Youngjae 2014-01-10 16:18:23