前言
Android LoadManager是3.0之后引入的,现在都8.0了,项目中可以不用考虑低版本的适配,完全可以使用,我项目中用的比较多,近期发现,LoadManager 有时无法回调onLoadFinish的方法.
解决方法
重载onStartLoading方法
加入forceLoad()(意思是强制执行)强制执行该回调方法
package com.contentproviderdb;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.support.v4.content.AsyncTaskLoader;
/**
* Created by sdj on 2017/9/7.
*/
public class LoadInstance extends AsyncTaskLoader<User> {
private User user;
private Context context;
private static final String URIS = "content://com.contentproviderdb.TestContentProvider";
public LoadInstance(Context context) {
super(context);
this.context = context;
user = new User();
}
@Override
public void stopLoading() {
super.stopLoading();
cancelLoad();
}
@Override
protected void onStartLoading() {
super.onStartLoading();
forceLoad();
}
@Override
public User loadInBackground() {
Uri uri = Uri.parse(URIS);
Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
if (null != cursor && cursor.getCount() > 0) {
StringBuilder stringBuilder = new StringBuilder("用户列表如下:\n");
while (cursor.moveToNext()) {
stringBuilder.append(cursor.getString(cursor.getColumnIndex("userName")) + " 密码= " + cursor.getString(cursor.getColumnIndex("userPwd")) + "\n");
}
user.setUserName(stringBuilder.toString());
}
return user;
}
}
参考相关资料链接如下:
小彩蛋
LoadManager有在android.app.包下面的LoadManager和android.support.v4包下的LoadManager,这两个有什么区别吗,答案是肯定的.
因为android.app.LoadManager是在android 3.0(API 11)上引入的,所以3.0之前的手机使用loadManager会报错的。
大家都知道,android版本升级后,
google官方会提供Android Support Library package 系列的包来保证高版本sdk开发的向下兼容性,下面是一些注意事项:
gradle引用appcompat-v7包的时候就不需要引用v4了,因为v7里默认包含了v4包;
compile ‘com.android.support:appcompat-v7:21.0.3’ 中的21代表API level 21推出的兼容包.
v4包冲突这个错误:多个module所引用的v4包版本不一致造成的; 把其他module的v4包修改成主module所使用的v4包即可!
support-v4
用在API lever 4(即Android 1.6)或者更高版本之上。它包含了相对更多的内容,而且用的更为广泛,例如:Fragment,NotificationCompat,
LoadBroadcastManager,ViewPager,PageTabAtrip,Loader,FileProvider 等
Gradle引用方法:
compile 'com.android.support:support-v4:21.0.3'
support-v7
这个包是为了考虑API level 7(即Android 2.1)及以上版本而设计的,但是v7是要依赖v4这个包的,v7支持了Action Bar以及一些Theme的兼容。
Gradle引用方法:
compile 'com.android.support:appcompat-v7:21.0.3'
所以说,建议大家还是使用V4包的Fragment和loadManager,基本系统1.6以上的平台都是可以做到兼容的.
谷歌新出的一些控件,大家也是可以用的,比如Android O 8.0里面的ResizeTextView,都是可以用到项目中的,谷歌
的向下兼容包可以到官网去查看引用,这样不会用存在版本上的问题!