2014-09-22 75 views
1

這是我的代碼。當我點擊後退按鈕漂亮simple..But,出現的第二個活動..點擊後退按鈕後,飛濺屏幕活動不會中止

public class MainActivity extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Thread t = new Thread(){ 
     public void run(){ 
      try{ 
       sleep(3000); 

      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      }finally{ 
       Intent i = new Intent(MainActivity.this,SecondActivity.class); 
       startActivity(i); 
      } 
     } 
    }; 
    t.start(); 
} 

@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 
    this.finish(); 
    } 

} 

我也把清單文件,但再次我仍然有同樣的問題..

 android:noHistory="true" 

回答

1

使用Handler這樣製作Splash屏幕

private static final int SPLASH_TIME_OUT = 3000; 
    private Handler mHandler = new Handler(); 
    private Runnable mRunnable; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.activity_main); 
     mRunnable = new Runnable() { 

      @Override 
      public void run() { 
       openLandingActivity(); 
      } 
     }; 
     mHandler.postDelayed(mRunnable, SPLASH_TIME_OUT);// 
    } 

    protected void openLandingActivity() { 
     // TODO Auto-generated method stub 
     Intent intent = new Intent(MainActivity.this,SecondActivity.class); 
     startActivity(intent); 
     finish(); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     // TODO Auto-generated method stub 
     if(keyCode == KeyEvent.KEYCODE_BACK) { 
      mHandler.removeCallbacks(mRunnable); 
      finish(); 
     } 
     return super.onKeyDown(keyCode, event); 
    } 
+0

爲什麼complext'的onkeydown()'代替'onBackPressed()' ? – 2014-09-22 08:47:04

+0

都做同樣的事情,它基本上是編碼器的選擇 – kId 2014-09-22 08:50:44

+0

是的,使用postDelayed方法是另一種方式,它也適用。其實我以後會使用post()來爲我的應用程序:)。再次感謝我的朋友。 – Theo 2014-09-22 09:02:52

3
} finally { 
    Intent intent = new Intent(); 
    intent.setClass(SplashActivity.this, MainActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivityForResult(intent, 0); 
    finish(); 
} 
+1

Thanks..That作品,以及:) – Theo 2014-09-22 08:43:42

0

試試這個希望它會幫助你..

private final int SPLASH_DISPLAY_LENGHT = 5000; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle icicle) 
{ 
    super.onCreate(icicle); 
    setContentView(R.layout.activity_main); 
    /* New Handler to start the Menu-Activity 
    * and close this Splash-Screen after some seconds.*/ 
    new Handler().postDelayed(new Runnable(){ 
     @Override 
     public void run() { 
      /* Create an Intent that will start the Menu-Activity. */ 
      Intent i = new Intent(MainActivity.this,SecondActivity.class); 
      startActivity(i); 
      splash.this.finish(); 
     } 
    }, SPLASH_DISPLAY_LENGHT); 
} 

}

0

我不得不使用的onkeydown()方法,這使得該問題,以disappear..Here是固定代碼..

public class MainActivity extends ActionBarActivity { 
    private boolean isBackPressed = false; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Thread t = new Thread(){ 
     public void run(){ 
      try{ 
       sleep(3000); 

      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      }finally{ 
       if(!isBackPressed){ 
       Intent i = new Intent(MainActivity.this,SecondActivity.class); 
       startActivity(i); 

       } 
      } 
     } 
    }; 
    t.start(); 
} 


@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) { 
     isBackPressed = true; 
     finish(); 
    } 
    return super.onKeyDown(keyCode, event); 

} 

} 
1

我建議你切換到該doInBackground期間休眠3秒的的AsyncTask()並開始新的活動+殺死onPostExecute()中的當前行爲,但僅當isCancelled()不正確時纔會執行。

然後覆蓋你濺活動onBackPressed()和:

  1. 取消當前的異步任務(保持在一個局部變量的引用)。
  2. 完成當前活動。

這樣AsyncTask仍然會在後臺睡3秒,但是當它的onPostExecute()出現時,它會通過檢查isCancelled()來知道它被取消,而不是啓動第二個活動。

參見:AsyncTask documentation