Android 在Service中調用Activity

來源:互聯網
上載者:User

前幾天做一個小應用,需要用到在service中調用Activity, 但是發現總是出現ANR,百度了下,發現各種說法,不過經過嘗試,發現問題不大,只需要加一句代碼就足夠了,代碼如下:


 

public class XXXService extends Service {          public void onCreate() {         super.onCreate();         //撥打到電話          Intent call = new Intent("android.intent.action.CALL", Uri.parse("tel:110"));         call.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);          startActivity(call);     } } public class XXXService extends Service {  public void onCreate() {  super.onCreate();  //撥打到電話  Intent call = new Intent("android.intent.action.CALL", Uri.parse("tel:110"));  call.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  startActivity(call); }

 關鍵語句是:call.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 究其原因可能是android系統考慮到穩定性(容易出現ANR)。

 


可以看一下官方文檔中對於startActivity()方法的描述:

Note that if this method is being called from outside of an Activity Context, then the Intent must include the FLAG_ACTIVITY_NEW_TASK launch flag. This is because, without being started from
 an existing Activity, there is no existing task in which to place the new activity and thus it needs to be placed in its own separate task.

 


大致的意思是這樣的:請注意,如果一個外部的Activity Context調用此方法,那麼,Intent對象必須包含 FLAG_ACTIVITY_NEW_TASK標誌,這是因為,待建立的Activity並沒有從一個已經存在的Activity啟動(任務棧中並沒有此Activity),它並沒有已經存在的任務,因此它需要被放置在自己獨立的任務中(也就是在任務棧中建立一個任務)。

 


 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.