我这里要说的是MediaScanner.java,代码连接http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob_plain;f=media/java/android/media/MediaScanner.java;hb=HEAD
请看pruneDeadThumbnailFiles()这个函数
Cursor c = mMediaProvider.query(
mThumbsUri,
new String [] { "_data" },
null,
null,
null);
Log.v(TAG, "pruneDeadThumbnailFiles... " + c);
if (c != null && c.moveToFirst()) {
do {
String fullPathString = c.getString(0);
existingFiles.remove(fullPathString);
} while (c.moveToNext());
}
for (String fileToDelete : existingFiles) {
if (Config.LOGV)
Log.v(TAG, "fileToDelete is " + fileToDelete);
try {
(new File(fileToDelete)).delete();
} catch (SecurityException ex) {
}
}
Log.v(TAG, "/pruneDeadThumbnailFiles... " + c);
if (c != null) {
c.close();
}
难道写这个函数的工程师不知道要把数据库游标的关闭放在finally里面吗?导致了这样的问题:
01-06 00:19:22.949: ERROR/StrictMode(514): Releasing statement in a finalizer. Please ensure that you explicitly call close() on your cursor: SELECT _id, date_modified, _data FROM video WHERE (mime_type != 'video/avi' AND mime_type != 'video
01-06 00:19:22.949: ERROR/StrictMode(514): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
01-06 00:19:22.949: ERROR/StrictMode(514): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:63)
01-06 00:19:22.949: ERROR/StrictMode(514): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
01-06 00:19:22.949: ERROR/StrictMode(514): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
01-06 00:19:22.949: ERROR/StrictMode(514): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
01-06 00:19:22.949: ERROR/StrictMode(514): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1356)
01-06 00:19:22.949: ERROR/StrictMode(514): at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:330)
01-06 00:19:22.949: ERROR/StrictMode(514): at com.android.providers.media.MediaProvider.query(MediaProvider.java:1607)
01-06 00:19:22.949: ERROR/StrictMode(514): at android.content.ContentProvider$Transport.bulkQuery(ContentProvider.java:174)
01-06 00:19:22.949: ERROR/StrictMode(514): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:111)
01-06 00:19:22.949: ERROR/StrictMode(514): at android.os.Binder.execTransact(Binder.java:320)
01-06 00:19:22.949: ERROR/StrictMode(514): at dalvik.system.NativeStart.run(Native Method)
分享到:
相关推荐
- 在Android系统中,串口通信通常用于与外部硬件如传感器、控制器或其他电子设备进行低级通信。 2. **Android串口API**: - "Android Serial"源码可能包含一个自定义的串口API,允许开发者进行读写操作,设置波特...
通过这个示例源码,开发者可以学习如何在Android环境中进行NFC读写操作,特别是与Ntag21x芯片的交互,这对于开发涉及NFC功能的应用非常有帮助。同时,理解JNI和So库的使用也是提升Android应用性能的重要手段。在实际...
在Android中,多媒体处理主要由Media Framework负责,它包含了多个层次,如MediaPlayer服务、OpenMAX AL(音频低级接口)、OpenMAX IL(跨平台多媒体接口)等。RockPlayer在此基础上进行了优化和扩展,以提供更好的...
在Android源码开发实战7.08的课程中,我们将深入探讨Android操作系统的内部机制,了解并实践如何基于源码进行应用开发。这个压缩包包含了该主题的学习资料,旨在帮助开发者提升对Android系统核心功能的理解,以及...
这个压缩包“安卓Android源码——安卓视音频播放测试工程.zip”包含了用于测试和学习的源码,特别针对音视频播放的功能。以下是对该工程中可能涉及的知识点的详细解释: 1. **MediaPlayer类**:Android系统提供的...
这个名为"Android源码——测试周围环境分贝的功能源码_new_53.7z"的压缩包包含了实现这一功能的源代码。在这里,我们将深入探讨相关知识点。 1. **麦克风权限**: 在Android中,任何涉及录音或捕捉音频数据的APP都...
在Android开发中,有时我们需要利用C或C++的性能优势,处理一些低级操作,如图形处理、加密解密或与硬件直接交互等。这种情况下,Android提供了Java Native Interface (JNI)来支持Java代码调用C/C++代码,以及C/C++...
这个"android高级开发源码集合"显然包含了针对这些方面的代码示例和项目,非常适合开发者深入理解Android系统的工作原理,以及如何在实际项目中应用这些技术。 首先,我们来关注"Android多媒体开发高级编程"这一...
9. **错误处理**:在源码中,我们还需要看到如何处理各种可能的错误,如文件不存在、解码失败、网络中断等,以提供良好的用户体验。 10. **兼容性**:由于Android设备的多样性,视频播放器需要考虑不同版本的...
4. **Android源码结构**:这个毕业设计可能包含以下几个主要部分: - `MainActivity.java`:Android应用的主入口,负责调用JNI接口。 - `JNI native方法`:在C/C++代码中实现的串口通信功能,如`openSerialPort`, ...
这份"安卓Android源码——网络通信的六种方式示例代码"的压缩包提供了多种网络通信方法的实践代码,帮助开发者更好地理解和运用这些技术。下面我们将详细探讨这六种网络通信方式。 1. **HTTP/HTTPS请求**: - **...
【Android RSS订阅源码Demo详解】 在Android应用开发中,RSS订阅是一种常见的功能,它允许用户获取并跟踪网站或博客的最新内容。本Demo旨在帮助开发者理解如何在Android平台上实现RSS订阅功能。RSS(Really Simple ...
在Android应用源码中,串口编程涉及到以下几个关键步骤: 1. **权限设置**:在AndroidManifest.xml文件中添加必要的权限,如`<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />`和`...
在Android应用开发中,NDK(Native Development Kit)是一组工具,允许开发者使用C和C++编写部分应用程序,以提高性能、处理低级硬件交互或利用特定硬件加速功能。本项目实战将带你深入理解Android NDK的使用,通过...
在这个项目源码中,我们可以深入学习Android平台上的视频处理技术,包括视频解码、渲染、控制以及用户体验优化等方面的知识。 1. 视频解码:SeeJoPlayer可能采用了硬件加速的解码方式,如MediaCodec API,来提高...
8. **异常处理**:原生代码中的错误不会像Java那样抛出异常,而是返回错误代码或触发信号。因此,需要在Java层处理这些返回值或信号。 9. **多平台兼容性**:Android支持多种架构(如armeabi, armeabi-v7a, arm64-...
在Android系统中,有时我们需要执行一些低级的操作,如文件管理、系统调试或者权限控制,这时就需要借助shell命令。通过ExecuteShell库,开发者可以避免直接与底层的复杂交互,简化了代码,提高了开发效率。 **核心...
本资源“Android应用源码之网络通信的六种方式示例代码”提供了丰富的实践案例,适用于毕业设计学习,帮助开发者深入理解Android中的网络编程。以下将详细讲解这六种网络通信方式及其应用。 1. **HttpURLConnection...
3. **3D图形处理**:源码中的3D元素可能利用了Flash的Stage3D API,这是一个低级的图形加速接口,可以实现硬件加速的3D渲染。这使得游戏能够在移动设备上呈现流畅的3D画面,提升游戏体验。 4. **Android适配**:...
这个源码项目为开发者提供了一个学习和参考Android串口通信的实例,可以帮助理解如何在Android平台上实现与外部设备的低级通信。通过分析和调试源代码,可以深入理解Android串口通信的原理和实践。