我在我的應用程序中有關於StrictMode
的問題,並添加了基本禁用StrictModeHelper
的代碼片段。然而,現在皮棉抱怨setThreadPolicy()
並提出以添加有什麼更好的:@SuppressLint或@TargetApi?
@SuppressLint 'NewApi'
或
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
到onCreate()
事件的看法。
哪種方法是首選..或者他們基本上是一樣的?
我在我的應用程序中有關於StrictMode
的問題,並添加了基本禁用StrictModeHelper
的代碼片段。然而,現在皮棉抱怨setThreadPolicy()
並提出以添加有什麼更好的:@SuppressLint或@TargetApi?
@SuppressLint 'NewApi'
或
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
到onCreate()
事件的看法。
哪種方法是首選..或者他們基本上是一樣的?
我有問題,我就StrictMode的應用程序,並添加代碼片段,基本上禁止StrictModeHelper
請修正網絡錯誤。
哪種方法是首選的?或者他們基本上是一樣的嗎?
@TargetApi
和@SuppressLint
具有相同的核心作用:它們抑制Lint錯誤。
區別在於,通過@TargetApi
,您可以通過參數聲明代碼中已處理的API級別,以便稍後修改該方法以嘗試引用比API更新的東西時,該錯誤可以再次彈出級別在@TargetApi
中引用。
例如,假設您沒有阻止關於您的網絡問題的StrictMode
投訴,而是嘗試解決在較新版本的Android上序列化爲AsyncTask
的問題。你必須在你的代碼這樣的方法來選擇到較新設備上的線程池,使用默認的多線程行爲對舊設備:
@TargetApi(11)
static public <T> void executeAsyncTask(AsyncTask<T, ?, ?> task,
T... params) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
}
else {
task.execute(params);
}
}
有@TargetApi(11)
意味着如果lint檢測,我使用的不是什麼新的我android:minSdkVersion
,但直到API級別11,林特不會抱怨。在這種情況下,這是有效的。但是,如果我修改此方法以引用在API級別14之前未添加的內容,則將再次出現Lint錯誤,因爲我的@TargetApi(11)
註釋表示我只修復了API級別11和
以下的代碼,並且在
以下以上,而不是以上的以下的API級別14和
。
使用@SuppressLint('NewApi')
,無論我的代碼引用以及我的代碼是如何處理的,我都將失去Lint錯誤的任何 API級別。
因此,@TargetApi
是首選註釋,因爲它允許您以更精細的方式告訴構建工具「好的,我解決了這類問題」。
我知道,使用異步方法將是可取的,只是在我的特殊情況下,我會堅持解決方法。感謝這個詳細而且非常容易理解的解釋 - 在這個機會中,還要感謝你非常有用的網頁,這幫助我理解了Android編程的一些概念! R. – richey
@richey:「就我個人而言,我會堅持解決方法」 - 這不是一個好主意。移動設備是移動設備。網絡連接相當不穩定,並且在各種情況下可能花費更多時間(例如,弱信號)。在主應用程序線程上執行網絡I/O意味着您的應用程序將在現場隨機與ANR崩潰。 – CommonsWare
哇,你的代碼示例是我試圖編寫的EXACT代碼!真是巧合:) –