ContentProvider启动时机问题简记
来源:互联网 发布:ug轮廓3d倒角编程技巧 编辑:程序博客网 时间:2024/04/30 14:33
今天代码中用到了自定义的ContentProvider,除了在AndroidManifest.xml中<provider />的声明外:
<provider android:name="MyContentProvider" android:authorities="com.my.provider.MyProvider"/>,应用侧的代码并没有显示启动MyProvider的逻辑。
1. 那么ContentProvider是什么时候启动起来的?
MyProvider的onCreate方法的执行调用栈可知:
MyContentProvider.onCreate() line: 47
MyContentProvider(ContentProvider).attachInfo(Context, ProviderInfo, boolean) line: 1591
MyContentProvider(ContentProvider).attachInfo(Context, ProviderInfo) line: 1562
ActivityThread.installProvider(Context, IActivityManager$ContentProviderHolder, ProviderInfo, boolean, boolean, boolean) line: 5084
ActivityThread.installContentProviders(Context, List) line: 4673
ActivityThread.handleBindApplication(ActivityThread$AppBindData) line: 4613
ActivityThread.access$1800(ActivityThread, ActivityThread$AppBindData) line: 141
ActivityThread$H.handleMessage(Message) line: 1298
ActivityThread$H(Handler).dispatchMessage(Message) line: 102
Looper.loop() line: 136
ActivityThread.main(String[]) line: 5336
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 515
ZygoteInit$MethodAndArgsCaller.run() line: 871
ZygoteInit.main(String[]) line: 687
NativeStart.main(String[]) line: not available [native method]
MyProvider是由ActivityThread负责启动的,ActivityThread对应应用进程的主线程,即在应用进程启动时,会将ContentProvider启动起来。
2. ContentProvider启动起来后,ContentProvider所对应的数据库对象实例(SQLiteDatabase实例)又是什么时候启动的?
SQLiteDatabase实例并不会马上创建,而是在第一次执行数据库操作(query,insert,delete,update)的时候才会真正创建。
MyProvider中定义了继承与SQLiteOpenHelper的内部类:MySQLiteHelper,在MyProvider的onCreate方法中会初始化MySQLiteHelper的对象:而在执行
query,insert,delete,update时,会通过:
SQLiteDatabase db = mDbHelper.getWritableDatabase()方式真正的创建SQLiteDatabase 实例。
- ContentProvider启动时机问题简记
- 简记利用ContentProvider执行删除操作
- 不同启动模式下onActivityResult的调用时机问题
- ContentProvider问题
- ContentProvider 问题
- SDE问题排查简记
- 前后台传参问题简记
- Android 些许问题简记
- MTK问题简记
- contentprovider启动分析
- 某SDE问题处理简记
- 简记
- 简记
- 简记
- 简记
- 简记
- 处理SDE服务无法启动案例简记
- SDE服务无法启动解决过程简记
- leetcode -- Jump Game-- 重点--Greedy
- Xcod 常见错误
- js----创建节点和插入节点
- Python——OOP(2)
- HDOJ--1006
- ContentProvider启动时机问题简记
- ZOJ 2358 2481
- HDU 1242 Rescue
- 【Android 进阶(一)】Android MVP框架实现过程
- 单调队列 hdu3401 Trade
- R语言--tapply,sapply(因子和列表的操作)
- IOS中5种传值方式详解(属性、Block代码块、代理、单例、通知)
- javascript脚本从载入浏览器到显示执行的过程解析
- HDU 1048 字符串转化(整行读取函数cin.getline(str,100))