2013-02-22 67 views
0

我正在开发一个应用程序,它使用minSdkVersion = 10作为姜饼。它在所有的姜饼设备上工作正常,但是当我尝试在4.0.3模拟器(ICS)上运行它时,它总是停下来。有什么设置我需要调整?android 2.3.3未在android 4.0.3上运行

这里是我的清单

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.das" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="10" 
    android:targetSdkVersion="15" /> 

和logcat的错误是这样的

02-22 15:03:40.217: E/global(514): Deprecated Thread methods are not supported. 
02-22 15:03:40.217: E/global(514): java.lang.UnsupportedOperationException 
02-22 15:03:40.217: E/global(514): at java.lang.VMThread.stop(VMThread.java:85) 
02-22 15:03:40.217: E/global(514): at java.lang.Thread.stop(Thread.java:1280) 
02-22 15:03:40.217: E/global(514): at java.lang.Thread.stop(Thread.java:1247) 
02-22 15:03:40.217: E/global(514): at   com.example.SpelloGrande.splash$1.run(splash.java:48) 

飞溅活动

public class splash extends Activity { 

//how long until we go to the next activity 
protected int _splashTime = 3000; 

private Thread splashTread; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.splash); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    final splash sPlashScreen = this; 

    // thread for displaying the SplashScreen 
    splashTread = new Thread() { 

     @Override 
     public void run() { 
      try { 
       synchronized(this){ 

         //duration 
         wait(_splashTime); 

       } 

      } catch(InterruptedException e) {} 
      finally { 
       finish(); 

       //start a new activity 
       Intent i = new Intent(); 
       i.setClass(sPlashScreen, MainActivity.class); 
         startActivity(i); 

       stop(); 
      } 
     } 
    }; 

    splashTread.start(); 
} 

//Function that will handle the touch 
@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     synchronized(splashTread){ 
       splashTread.notifyAll(); 
     } 
    } 
    return true; 
} 

} 
+0

邮政splash.java:48和周围的代码 – 2013-02-22 07:14:26

+0

重复的问题:http://stackoverflow.com/q/8686861/620338 – 2013-02-22 07:18:14

+0

你去那里。我在我的java代码中看到我的splash的第48行是stop();其中有一条线,并说'方法停止()从线程类型已被弃用' – Jerome 2013-02-22 07:19:14

回答

0

您使用的是4.0不赞成使用的方法。 3,但不在2.3.3。基本上2.3.3有功能但4.0.3不行。无论Splash中第48行的功能是你需要删除的方法。

0

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

创建一个处理程序实例

Handler handler = new Handler(); 

创建一个Runnable线程

Runnable runnable = new Runnable() { 

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

,并启动了Runnable使用处理器

handler.postDelayed(runnable, 1000); 

,并停止了Runnable使用

handler.removeCallbacks(runnable); 
+0

我试过这个先生,但仍然没有运气 – Jerome 2013-02-22 07:24:36

+0

尝试上面的东西,我刚刚找到。并检查它是否工作,并让我知道。 **我刚刚更新了Answare ** – 2013-02-22 08:12:50

+0

此解决方案是否工作? – 2013-02-22 09:06:14

0

尝试使用运行的线程,而不是

splashThread = new Thread(new runnable(){ 
     public void run(){ 


     //do your things here 


     } 
    }); 
    splashThread.start(); 

编辑

您不必包括停止();在你的线程中。 一旦完成任务,您的主题将停止。除非你使用Thread.sleep();

+0

感谢大家的帮助。我已经可以在ICS – Jerome 2013-02-22 08:33:07

+0

上运行它了,如果它对您有帮助,请尝试upvote或接受上述任何一个答案。 – 2013-02-22 08:41:58

0

请尝试下面的代码,它适用于我所有的Android版本。

public class Act_Splashscreen extends Activity 
{ 
    private int delay = 5000; 

    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.splash_screen); 

     try 
     { 

      Timer timer = new Timer(); 
      TimerTask task = new TimerTask() 
      { 
       @Override 
       public void run() 
       { 
        // TODO Auto-generated method stub 

        Intent intent = new Intent(Act_Splashscreen.this, newactivity.class); 
        startActivity(intent); 
        finish(); 
       } 

      }; 

      timer.schedule(task, delay); 
     } catch (Exception e) { 
      // TODO: handle exception 
     } 
    } 
}