2016-12-26 55 views
1

我是Android應用開發新手。 我想了解什麼是意圖和它的用途。爲什麼在創建Intent實例時傳遞'this'?

我的問題是,當開始另一個活動時,爲什麼'this'關鍵字作爲意圖的上下文參數傳遞?

Intent foo = new Intent(this, viewContacts.class); 

據我所知,任何活動擴展Context類,但是爲什麼到了我們傳遞的活動情境,而不是應用程序上下文

我點 -

當另一個活動開始的當前活動都會被摧毀,但其背景將被傳遞到另一個。參考this文章,它說

避免與上下文相關的內存泄漏的最明顯的方法是避免在其範圍之外轉移上下文。

那麼我們是不是將當前活動的上下文傳遞給第一個超出範圍的另一個活動? 難道不是內存泄漏的例子嗎?

+1

在這種情況下(Intent的雙參數構造函數),Context參數僅用於確定目標Activity的包名。而已。請參閱我的答案在這裏類似的問題:http://stackoverflow.com/a/38870648/769265 –

+0

@DavidWasser感謝您的回覆! –

回答

3

爲什麼我們傳遞活動上下文而不是應用程序上下文?

要麼在這裏工作。 thisgetApplicationContext()更少打字,執行速度更快。

當另一個活動開始時,當前活動將被銷燬,但其上下文將傳遞給另一個活動。

你假設Intent擁有此Context。它不是。

那麼我們是不是將當前活動的上下文傳遞給另一個當前活動的上下文超出範圍?

號的Intent可以是隱式或顯式的。一個明確的Intent是一個附有ComponentName的標識符,用於標識此打算使用的組件的特定應用程序(通過包名稱)和Java類(通過完全限定的類名稱)。提供ContextClass對象的雙參數構造函數用於構建ComponentName。在構造函數完成後,IntentComponentName都不能保持在Context上。

+0

謝謝!這回答了我的問題。但你只是說過要麼在這裏工作。我很困惑,因爲應用程序上下文和活動上下文有不同的信息。 –

+0

那麼爲什麼他們兩個都可以在這裏使用呢?另外,爲什麼'this'比getApplicationContext()更快執行呢?是因爲當我們調用getApplicationContext()而'this'已經可用時。 –

+1

@RohanBhatia:我推薦[這篇博客文章](https://possiblemobile.com/2013/06/context/)給你一個關於不同'Context'對象的不同角色的想法。兩者都可以使用,因爲它們都會爲相關方法返回相同的值(例如'getPackageName()')。這是一個客體; 'getApplicationContext()'是一個返回對象的方法。做事(調用方法)總是比不做這件事慢。 – CommonsWare

相關問題