Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 在Service中調用Activity

Android 在Service中調用Activity

編輯:關於Android編程

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

 


 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved