Java MediaScanner的prescan函数中是否不需要while语句?

Java MediaScanner的prescan函数中是否不需要while语句?,java,android,sqlite,mediastore,Java,Android,Sqlite,Mediastore,当我阅读安卓4.4源代码时,我发现这个函数有两个while语句,根据where语句(where=MediaStore.Files.FileColumns.\u ID+“>?”),一旦查询,SQlite将返回所有结果,所以我认为第一个while语句是无用的。这是真的吗 private void prescan(字符串文件路径,布尔值prescanFiles)引发RemoteException{ 光标c=null; 字符串,其中=null; 字符串[]selectionArgs=null; if(

当我阅读安卓4.4源代码时,我发现这个函数有两个while语句,根据where语句(where=MediaStore.Files.FileColumns.\u ID+“>?”),一旦查询,SQlite将返回所有结果,所以我认为第一个while语句是无用的。这是真的吗

private void prescan(字符串文件路径,布尔值prescanFiles)引发RemoteException{
光标c=null;
字符串,其中=null;
字符串[]selectionArgs=null;
if(mPlayLists==null){
mPlayLists=newarraylist();
}否则{
mPlayLists.clear();
}
if(filePath!=null){
//仅查询一个文件
其中=MediaStore.Files.FileColumns.\u ID+“>?”+
和“+Files.FileColumns.DATA+”=?”;
selectionArgs=新字符串[]{“”,filePath};
}否则{
其中=MediaStore.Files.FileColumns._ID+“>?”;
selectionArgs=新字符串[]{”“};
}
Uri.Builder=mFilesUri.buildon();
builder.appendQueryParameter(MediaStore.PARAM_DELETE_DATA,“false”);
MediaBulkDeleter deleter=新的MediaBulkDeleter(MMediProvider,mPackageName,
builder.build());
//从内容提供程序生成文件列表
试一试{
if(预扫描文件){
long lastId=long.MIN_值;
Uri limitUri=mFilesUri.buildOn().appendQueryParameter(“limit”,“1000”).build();
mWasEmptyPriorToScan=真;
while(true){
selectionArgs[0]=“”+lastId;
如果(c!=null){
c、 close();
c=零;
}
c=mmediprovider.query(mPackageName、limitUri、FILES\u PRESCAN\u PROJECTION、,
其中,selectionArgs,MediaStore.Files.FileColumns.\u ID,null);
如果(c==null){
打破
}
int num=c.getCount();
如果(num==0){
打破
}
mWasEmptyPriorToScan=错误;
while(c.moveToNext()){
long rowId=c.getLong(文件\u预扫描\u ID\u列\u索引);
String path=c.getString(文件\预扫描\路径\列\索引);
int format=c.getInt(文件\预扫描\格式\列\索引);
long lastModified=c.getLong(文件\预扫描\日期\修改\列\索引);
lastId=rowId;
...
}
}
}
}
...
}
所以我认为第一个while语句是无用的,是真的吗

这不是无用的。此代码不是系统中运行的唯一代码


考虑一下,如果在处理前一个查询的结果集的同时向媒体提供商添加了新内容,会发生什么情况。如果没有第一个while循环,该内容将不会被扫描。循环就绪后,它会立即被考虑。

您有完整源代码的链接吗?那些“…”也许能提供线索。