2010-05-15 188 views

回答

7

只有一個startService()方法。 startService()Context類中的一種方法,可用於Context的所有子類,如ActivityService

+0

爲什麼有些使用Context.startService(意向)而不只是startService(意圖)? – mnish 2010-05-15 15:59:46

+0

你將不得不問他們。沒有必要。 – CommonsWare 2010-05-15 18:12:32

+0

請參閱下面的答案,瞭解爲什麼以及何時使用Context @mnish – Nepster 2014-07-17 10:26:31

2

正如Commonsware所說只有一個startService()。那是Context.startService(intent)

您的主要活動程序本身是Context的一個實例,您不需要用Context明確地調用方法(startService)。

這就像是在類中調用一個類的方法。

0

說明

大家在的Android可以知道如何使用Adapter。我們可以爲他們創建單獨的課程。這將使我們的編碼更易於處理和理解。但是當我們單獨創建這些類時。他們需要一個上下文Calling on behalf)。所以在這種情況下,我們在構造函數中傳遞活動的上下文。通過這種方式,Android知道我們正在代表哪個活動進行調用。

我們不能把

getSystemService(Context...)//blah bhal 

在單獨的適配器類,但我們可以通過上下文適配器構造函數,可以這樣調用..

context.getSystemService(Context....)// 

打電話給你的適配器是這樣

ArticleAdapter adapter = new ArticleAdapter(context, list); 

        list_of_article.setAdapter(adapter); 

,並得到這樣的上下文..

ArticleAdapter.class

public class ArticleAdapter extends BaseAdapter 
{ 
    Context context; 

    ArrayList<HashMap<String, String>> list; 

    LayoutInflater inflater; 

    public ArticleAdapter(Context context, 
      ArrayList<HashMap<String, String>> list) 
    { 
     this.context = context; 

     this.list = list; 

     inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() 
    { 
     return list.size(); 
    } 

    @Override 
    public Object getItem(int position) 
    { 
     return list.get(position); 
    } 

    @Override 
    public long getItemId(int position) 
    { 
     return position; 
    } 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     View view = convertView; 

     if (view == null) 
     { 
      view = inflater.inflate(R.layout.item_article, parent, false); 
     } 

     HashMap<String, String> map = list.get(position); 

     TextView Title = (TextView) view.findViewById(R.id.item_title); 

     TextView ByWhom = (TextView) view.findViewById(R.id.item_bywhom); 

     ImageView Img = (ImageView) view.findViewById(R.id.item_img); 

     ProgressBar bar = (ProgressBar) view.findViewById(R.id.progressBar1); 

     TextView TextUnderImg = (TextView) view 
       .findViewById(R.id.item_text_under_imag); 

     TextView Comments = (TextView) view.findViewById(R.id.item_comment); 

     TextView TableView = (TextView) view.findViewById(R.id.item_tableview); 

     TextView ReadMore = (TextView) view.findViewById(R.id.item_readmore); 

     context.getSystemService(Context.CONNECTIVITY_SERVICE);// if you want these service you must have to call it using context. 

     Title.setText(map.get("title")); 

     ByWhom.setText(map.get("publishdate")); 

     return view; 
    } 

} 
+0

不要拘泥於「AsyncTask」中的「Activity」。如果在AsyncTask正在運行時該活動被銷燬(BACK按鈕,配置更改等),則現在「AsyncTask」將被保留爲無效活動。特別是** never **指的是來自'doInBackground()'的活動,因爲活動在後臺線程運行時處於不確定狀態。在這種情況下,'AsyncTask'應該保存在'LayoutInflater'和'ConnectivityService'中。 – CommonsWare 2014-07-17 10:38:55

+0

我明白@CommonsWare但根據適配器。我有關於在適配器中使用它的正確概念 – Nepster 2014-07-17 10:45:37

+0

Yeesh,我需要更多的睡眠。我很抱歉。在這種情況下,我可能仍會傳入'LayoutInflater'和'ConnectivityService',但我不太關心任何問題。再次,我爲我的錯誤道歉。 – CommonsWare 2014-07-17 10:47:22