0

アプリの4.xデバイスで問題が発生しています。アクティビティの変更中(スプラッシュ画面から実際のアプリケーションへ)にスレッドがクラッシュしているようです。スクリーンショットは次のとおりです。

UnsupportedOperationExceptionスクリーンショット

スプラッシュアクティビティコードは次のとおりです。

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行目にあります。

4

2 に答える 2

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);

}
于 2012-07-19T08:38:33.567 に答える
0

GUIを使用したすべての操作は、イベントUIスレッドで続行する必要があります。Android 4は、この要件がより厳しくなります。これが、アプリがその下でクラッシュする理由である可能性があります。ご覧のとおり、UIスレッドのアクティビティは変更しません。詳細については、 AsyncTaskを参照してください。

于 2012-07-19T08:47:54.377 に答える