【发布时间】:2015-11-02 23:28:59
【问题描述】:
我有一个应用程序,当ContentObserver 通知ContentProvider 发生更改时,它会尝试在后台线程上查询提供程序。这会导致SecurityException 被抛出:
应用创建的线程如何以与应用的 ContentProvider 不同的 UID 结束?
通过在android.content.ContentProvider 中放置一个异常断点,我看到UserHandle.isSameApp(uid, mMyUid) 是false 而UserHandle.isSameUser(uid, mMyUid) 是true。我还看到提供者 UID 是 10087。
【问题讨论】:
-
您问的是 uid=1000 - 这是 Android 系统用户 ID。请求很可能在内部被代理到系统进行处理。
-
@adelphus 是的。我认为这是安全异常的原因,但现在我不确定因为
UserHandle.isSameUser返回true。 -
Android 用户与 App uid 值无关。不要把它们混在一起!应用程序 uid 值用于在应用程序之间强制执行沙盒,用户安全的实现方式不同。
-
啊,好的。所以问题是为什么
UserHandle.isSameApp返回false,即使线程是由应用程序创建的。 -
当你说
background thread时,你的意思是Thread或AsyncTask,还是别的什么?
标签: android android-contentprovider uid android-securityexception