问题:
报错信息:
java.lang.RuntimeException: Package manager has died
原因:
PackageInfo中数据量太大了,在部分手机上超出了Binder可传递的最大容量,进而导致PacakgeManager崩溃。
解决:
因为我只要用到versionName和versionCode两个信息,所以不需要activity等信息,能不能让PackageInfo的信息量小点。
getPackageInfo(String packageName, @PackageInfoFlags int flags)它的第二个参数flag,使得该方法返回的对象容量减小。
源码:
/**
* Retrieve overall information about an application package that is
* installed on the system.
*
* @param packageName The full name (i.e. com.google.apps.contacts) of the
* desired package.
* @param flags Additional option flags. Use any combination of
* {@link #GET_ACTIVITIES}, {@link #GET_CONFIGURATIONS},
* {@link #GET_GIDS}, {@link #GET_INSTRUMENTATION},
* {@link #GET_INTENT_FILTERS}, {@link #GET_META_DATA},
* {@link #GET_PERMISSIONS}, {@link #GET_PROVIDERS},
* {@link #GET_RECEIVERS}, {@link #GET_SERVICES},
* {@link #GET_SHARED_LIBRARY_FILES}, {@link #GET_SIGNATURES},
* {@link #GET_URI_PERMISSION_PATTERNS}, {@link #GET_UNINSTALLED_PACKAGES},
* {@link #MATCH_DISABLED_COMPONENTS}, {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
* {@link #MATCH_UNINSTALLED_PACKAGES}
* to modify the data returned.
*
* @return A PackageInfo object containing information about the
* package. If flag {@code MATCH_UNINSTALLED_PACKAGES} is set and if the
* package is not found in the list of installed applications, the
* package information is retrieved from the list of uninstalled
* applications (which includes installed applications as well as
* applications with data directory i.e. applications which had been
* deleted with {@code DONT_DELETE_DATA} flag set).
* @throws NameNotFoundException if a package with the given name cannot be
* found on the system.
* @see #GET_ACTIVITIES
* @see #GET_CONFIGURATIONS
* @see #GET_GIDS
* @see #GET_INSTRUMENTATION
* @see #GET_INTENT_FILTERS
* @see #GET_META_DATA
* @see #GET_PERMISSIONS
* @see #GET_PROVIDERS
* @see #GET_RECEIVERS
* @see #GET_SERVICES
* @see #GET_SHARED_LIBRARY_FILES
* @see #GET_SIGNATURES
* @see #GET_URI_PERMISSION_PATTERNS
* @see #MATCH_DISABLED_COMPONENTS
* @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
* @see #MATCH_UNINSTALLED_PACKAGES
*/
public abstract PackageInfo getPackageInfo(String packageName, @PackageInfoFlags int flags)
throws NameNotFoundException;
使用GET_SIGNATURES,获取的数据量相对较小。