0
public class tryAnimActivity extends Activity 
{

  /**
   * The thread to process splash screen events
   */
  private Thread mSplashThread;    

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

    // Splash screen view
    setContentView(R.layout.janman);

    final tryAnimActivity sPlashScreen = this;   

    // The thread to wait for splash screen events
    mSplashThread =  new Thread(){
        @Override
        public void run(){
            try {
                synchronized(this){
                    // Wait given period of time or exit on touch
                    wait(5000);
                }
            }
            catch(InterruptedException ex){                    
            }

            finish();

            // Run next activity
            Intent intent = new Intent();
            intent.setClass(sPlashScreen, TabsActivity.class);
            startActivity(intent);
            stop();                    
        }
    };

    mSplashThread.start();        
  }

  /**
   * Processes splash screen touch events
   */
  @Override
  public boolean onTouchEvent(MotionEvent evt)
  {
    if(evt.getAction() == MotionEvent.ACTION_DOWN)
    {
        synchronized(mSplashThread){
            mSplashThread.notifyAll();
        }
    }
    return true;
  }    
} 

このコードの問題は何ですか? クリックすると、クラッシュします。また、このアクティビティが終了しても次のアクティビティは開始されません。これは、スプラッシュスクリーンを表示するために使用されるアクティビティです。

4

2 に答える 2

1

stop()メソッドを削除するだけで機能します

于 2012-07-05T09:02:03.013 に答える
1

Thread の代わりに Runnable 要素を使用することを好みます。以下のアクティビティのスプラッシュ コードはうまく機能します。お役に立てば幸いです:

public class SplashScreenActivity extends Activity implements OnTouchListener {

    private int SPLASH_DISPLAY_LENGTH = 3000;

    private Handler splashHandler;
    private Runnable splashRunnable;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);

        findViewById(R.id.splash_img).setOnTouchListener(this);

        splashHandler = new Handler();
        splashRunnable = new Runnable()
        {
            @Override
            public void run()
            {
                SplashScreenActivity.this.finish();
                Intent mainIntent = new Intent(SplashScreenActivity.this, HomeActivity.class);
                startActivity(mainIntent);
            }
        };

        splashHandler.postDelayed(splashRunnable, SPLASH_DISPLAY_LENGTH);

    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN){
            splashHandler.removeCallbacks(splashRunnable);
            SplashScreenActivity.this.finish();
            Intent mainIntent = new Intent(SplashScreenActivity.this, HomeActivity.class);
            startActivity(mainIntent);
        }
        return true;
    }
}
于 2012-07-05T13:14:11.343 に答える