【问题标题】:android 2.3.3 not running on android 4.0.3android 2.3.3 未在 android 4.0.3 上运行
【发布时间】:2013-02-22 07:12:52
【问题描述】:

我正在开发一个将 minSdkVersion=10 用于姜饼的应用。它在所有姜饼设备上运行良好,但是当我尝试在 4.0.3 模拟器(ICS)上运行它时,它总是停止。我需要调整什么设置吗?

这是我的清单

<?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;
}

}

【问题讨论】:

  • 发布 splash.java:48 及周边代码
  • 你去。我在我的 java 代码中看到我的启动画面的第 48 行是 stop();它有一条线,上面写着The method stop() from the type Thread is deprecated

标签: android


【解决方案1】:

您使用的方法在 4.0.3 中已弃用,但在 2.3.3 中未弃用。基本上 2.3.3 有这个功能,但 4.0.3 没有。 Splash 中第 48 行的任何功能都是您需要删除的方法。

【讨论】:

    【解决方案2】:

    试试下面的代码,它适用于所有 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
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      尝试使用可运行线程

        splashThread = new Thread(new runnable(){
              public void run(){
      
      
              //do your things here
      
      
              }
        });
        splashThread.start();
      

      编辑

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

      【讨论】:

      • 感谢大家的帮助。我已经能够在 ICS 上运行它
      • 不客气,如果对您有帮助,请尝试投票或接受上述任何一个答案。
      【解决方案4】:

      在 Android 中,最好使用 Handler 来管理 ThreadRunnables

      创建一个Handler实例

      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 启动 Runnable

      handler.postDelayed(runnable, 1000);
      

      并停止 Runnable 使用

      handler.removeCallbacks(runnable);
      

      【讨论】:

      • 试试我刚刚找到的东西。并检查它是否工作并让我知道。 我刚刚更新了 Answare
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-10
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多