Android:带有线程的UnsupportedOperationException

时间:2012-07-19 08:33:25

标签: android multithreading exception

我的应用程序使用4.x设备时出现问题。看起来线程正在使其在更改活动时崩溃(从启动屏幕到实际应用程序)。这是一个截图:

UnsupportedOperationException screenshot

启动活动代码是:

public class Splash extends Activity {

protected boolean _active = true;
protected int _splashTime = 3000; // tempo di permanenza spash screen

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);

    Thread splashTread = new Thread() {
        @Override
        public void run() {
            try {
                int waited = 0;
                while(_active && (waited < _splashTime)) {
                    sleep(100);
                    if(_active) {
                        waited += 100;
                    }
                }
            } catch(InterruptedException e) {
                // do nothing
            } finally {
                finish();
                Intent i = new Intent(Splash.this, Test01Activity.class);
                startActivity(i);
                stop();
            }
        }
    };
splashTread.start();
}

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

此外,该应用程序并没有真正崩溃,因为主要活动在后台继续工作(在“不幸,应用程序停止工作”警报后面)。这个问题只在4.x设备中发现,2.x和3.x都是全功能的。错误发生在第37行。

2 个答案:

答案 0 :(得分:2)

我认为例外是由于deprecated stop method of Thread class的使用。 ICS 4.0可能不支持。

您可以使用Handler代替线程。

您可以在启动画面onCreate方法

中尝试以下代码
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);

    Handler mHandler = new Handler();
        mHandler.postDelayed(new Runnable() {

            @Override
            public void run() {
                Intent i = new Intent(Splash.this, Test01Activity.class);
                startActivity(i);
            finish();

            }
        }, _splashTime);

}

答案 1 :(得分:0)

每个带GUI的操作都必须在事件UI线程中进行。 Android 4在此要求中更为严重。这可能是您的应用程序崩溃的原因。如我所见,您不会更改UI线程中的活动。有关详细信息,请参阅AsyncTask