2011-11-08 55 views
0

我一個人應該避免使用完成()的文檔閱讀 - 但我實在看不出這個更好的選擇......替代完成()

我只是想知道,如果有是一個更好的,更清潔的方式做到這一點...

非常感謝

這就是我基本上需要做的:

MainActivity 
    -> Sub1Activity 
     -> MySMSActivity 
     -> send SMS 
     -> handle if SMS was sent or not 
      <- finish() 
     <- finish() 
(skip Sub1Activity) 
MainActivity 

在MainActi代碼VITY:

this.myBtn.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     doSub1Activity("xyz"); 
    } 
}); 

public void doSub1Activity() { 
    Intent i; 
    i = new Intent(this, SUB1_screen.class); 
    startActivity(i); 
} 

中的代碼Sub1Activity:

this.myBtn.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     doMySMSActivity("xxx"); 
     finish();   //<- this is the 1. call to "finish" I am concerned about 
    } 
public void doMySMSActivity() { 
    Intent i; 
    i = new Intent(this, MySMSActivity.class); 
    startActivity(i); 
    } 

中的代碼MySMSActivity:

private void sendSMS(String phoneNumber, String message) 
    {   
     String SENT = "SMS_SENT"; 
     String DELIVERED = "SMS_DELIVERED"; 

     PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, 
       new Intent(SENT), 0); 

     //---when the SMS has been sent--- 
     bRSMS_has_been_sent = new BroadcastReceiver(){ 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 

       switch (getResultCode()) 
       { 
       case Activity.RESULT_OK: 
        ... 
        break; 
       default: 
        break; 
       } 
       finish(); // another call to finish so the user continues with 
             // MainActivity after SMS has been sent... 
      } 
     }; 

     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);   
    } 
+0

您能鏈接到文檔嗎? – Ally

回答

1

你不必調用finish()多次。如果您需要返回到主要活動,只需使用具有以下標誌的意圖啓動它即可。如果它已經存在,這將重用該活動。

Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_SINGLE_TOP

+0

只是爲了clariy,在MySMSActivity我會startActivity(MainActivity)與你提到的標誌?這會導致Sub1Activity和MySMSActivity保持活躍狀態​​嗎? – user387184

+0

是的。一般來說,你不應該擔心這一點。您可能想要釋放昂貴的資源'onPause()',但除此之外,如果活動未完成則沒有問題。 –

+0

另外,如果我不知道哪一個活動是我需要返回的活動(我只需要從堆棧中取出這兩個活動並繼續頂部的任何活動,因爲Sub1Activity可能已被另一個比MainActivity調用)那麼我是否真的必須把這個活動作爲一個「委託人」一直傳遞下去,所以我知道該回到哪裏?在這種情況下調用finish是否真的很糟糕? – user387184

0

爲什麼你讓自己的短信發送自己的活動?它不會與用戶交互 - 只需從Sub1Activity中剔除您的未決意圖

+0

...因爲除了發送短信之外,MySMSActivity還有其他一些功能...... – user387184