java.lang.RuntimeException: Package manager has died

问题:

java.lang.RuntimeException: Package manager has died_第1张图片

报错信息:

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,获取的数据量相对较小。

参考:http://www.jianshu.com/p/ddf194530bb6

你可能感兴趣的:(问题记录)