【问题标题】:Android: UnsupportedOperationException with a ThreadAndroid:带有线程的 UnsupportedOperationException
【发布时间】:2012-07-19 08:33:24
【问题描述】:

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

启动活动代码为:

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 行。

【问题讨论】:

  • 到底哪里崩溃了?请粘贴您的 LogCat。
  • 您的代码似乎与本主题中的相同:stackoverflow.com/q/4414737/517561
  • 第 37 行。抱歉,我是用电脑写的,而 Eclipse 在另一台电脑上。

标签: android multithreading exception


【解决方案1】:

我认为异常是由于使用了deprecated stop method of Thread classICS 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);

}

【讨论】:

    【解决方案2】:

    每个带有 GUI 的操作都必须在事件 UI 线程中进行。 Android 4 在这个要求上更加严格。这可能是您的应用在其下崩溃的原因。如我所见,您不会更改 UI 线程中的活动。详情请见AsyncTask

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      相关资源
      最近更新 更多