Android 在Service中調用Activity

前幾天做一個小應用,需要用到在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),它並沒有已經存在的任務,因此它需要被放置在自己獨立的任務中(也就是在任務棧中新建一個任務)。

 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *