2012-01-14 76 views
1

我的項目中有兩項活動 - Splash和AActivity。飛濺是主要活動,工作正常。但是,如果我在Splash活動運行時更改方向,則飛濺活動的UI會熄滅,但會在10秒後打開AActivity。飛濺的活動方向改變時活動會死亡

代碼 -

public class Splash extends Activity{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.splash); 

     Thread timer = new Thread(){ 
      public void run() { 
       try{ 
        sleep(10000); 

       }catch(InterruptedException e){ 
        e.printStackTrace(); 
       }finally{ 
        Intent AActivityIntent = new Intent("com.example.ex.AACTIVITY"); 
        startActivity(AActivityIntent); 
       } 
      }}; 

     timer.start(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     finish();         
    } 

} 

我想保留飛濺活動的UI,持續10秒,即使方向改變。 10秒後飛濺活動應該完成。怎麼做 ???

回答

0

而不是使用一個線程推遲發射活動中使用Alarmmanager的,即使你退出應用程序,你可以隨時取消未決報警

2

的,我建議你做以下幾點:

public class Splash extends Activity { 
    private Thread timer; 
    private volatile long timeLeft; 
    private long timeStarted; 
    private long timeStopped; 

    private static final long TIME_TO_SHOW = 100000 
    private static final String KEY_TIME_LEFT = "timeLeftToRun"; 

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

     if (savedInstanceState != null) { 
      timeLeft = savedInstanceState.getLong(KEY_TIME_LEFT, 0); 
     } else { 
      timeleft = TIME_TO_SHOW; 
     } 

     timer = new Thread() { 
      public void run() { 
       try { 
        sleep(timeLeft); 
        Intent AActivityIntent = new Intent("com.example.ex.LISTSCREEN"); 
        startActivity(AActivityIntent); 
       } catch(InterruptedException e) {} 
      } 
     }}; 
     timeStarted = SystemClock.elapsedRealtime(); 
     timer.start(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     timer.interrupt(); 
     timeStopped = SystemClock.elapsedRealtime(); 
     finish();         
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     timeLeft -= timeStopped - timeStarted; 
     if (timeLeft > 0) outState.putLong(timeLeft); 
    } 
} 

的這裏的主要想法是,如果活動被殺死,你殺死線程,但是你記錄它運行了多久,剩下多少時間。活動恢復後,您可以執行相同的操作,但必須等待較短的時間。

上面的代碼當然沒有經過測試,但它應該說明這個想法。

+0

++不適用於懶惰的方法。 – Jens 2012-01-14 22:46:10

+0

@Malcolm謝謝馬爾科姆。我已經嘗試過你的方法,從代碼中刪除了一些語法錯誤,但是在我的設備上運行應用程序時出現「應用程序意外停止......」錯誤。不知道爲什麼? – Vivek 2012-01-14 23:01:46

+0

您應該查看[DDMS](http://developer.android.com/guide/developing/debugging/ddms.html)中的日誌,它們應該有異常和堆棧跟蹤。 – Malcolm 2012-01-15 08:51:52

2

將下面的塊插入到您的清單中。 這意味着您的「活動」控制的方向變化情況。 http://developer.android.com/guide/topics/manifest/activity-element.html#config

機器人:configChanges = 「方向」

多。

重寫「onConfigurationChanged」方法。

試試這個。你可以做你想做的一切。

+0

如果取決於屏幕方向,您將需要記住自己更改佈局。 – Malcolm 2012-01-14 22:41:47

+0

這可能是最簡單的解決方案,只要你不需要你的啓動畫面旋轉即可。 – Brigham 2012-01-14 22:42:04

+0

@Brigham我同意,我的解決方案更像是「Android」這樣做的方式,但它更復雜。 – Malcolm 2012-01-14 22:43:14