Android Sugar ORM在init上阻塞UI线程
我正在为我的android 5.1应用程序使用1.3.1版的Sugar ORM 今天,在安装我的应用程序后,我注意到Sugar ORM正在阻止UI线程进行初始化,时间大约为2.4秒 有没有办法在后台线程中完成这些工作以改进用户体验Android Sugar ORM在init上阻塞UI线程,android,multithreading,performance,orm,sugarorm,Android,Multithreading,Performance,Orm,Sugarorm,我正在为我的android 5.1应用程序使用1.3.1版的Sugar ORM 今天,在安装我的应用程序后,我注意到Sugar ORM正在阻止UI线程进行初始化,时间大约为2.4秒 有没有办法在后台线程中完成这些工作以改进用户体验 04-07 20:14:42.179 10407-10407/com.sample.app I/Sugar﹕ on create 04-07 20:14:44.354 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:42.179 10407-10407/com.sample.app I/Sugar﹕ on create
04-07 20:14:44.354 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.358 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.358 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.360 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.362 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.365 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.366 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.368 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.370 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.372 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.373 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.375 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.377 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.378 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.380 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.381 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.383 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.385 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.389 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.390 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.392 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.395 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.397 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.399 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.400 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.402 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.402 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.405 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.406 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.407 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.407 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.408 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.409 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.410 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.411 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.412 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.413 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.414 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.415 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.415 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.416 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.417 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.418 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.418 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.420 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.420 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.420 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.421 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.421 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.422 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.422 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.423 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.423 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.424 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.425 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.426 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.427 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.427 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.429 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.429 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.430 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.431 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.431 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.432 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.432 10407-10407/com.sample.app I/Sugar﹕ domain class
04-07 20:14:44.506 10407-10407/com.sample.app I/Sugar﹕ create table
04-07 20:14:44.506 10407-10407/com.sample.app D/Sugar﹕ Fetching properties
04-07 20:14:44.507 10407-10407/com.sample.app I/Sugar﹕ creating table ARTICLE
正如您所建议的,在后台任务中进行数据库初始化是我想到的最简单的解决方案。 首先,我想你应该已经注意到,当你使用一个扩展SugarRecord的对象时,sugar的创建第一次开始了,所以我所做的就是在我的应用程序启动的一开始(当然是在后台)拉这个动作。我就是这样做的:
public class DBInit extends AsyncTask<Void,Void,Void> {
@Override
protected Void doInBackground(Void... params) {
Offer.last(Offer.class);
return null;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash_screen);
// Init the data base in a AsyncTask
DBInit dbInit = new DBInit();
dbInit.execute();
}
Offer.listAll(Offer.class)
而不是Offer.last(Offer.class)
来实现相同的功能。但是,我会避免这样做,因为最终可能会拉过存储在其中的数百或数千个对象。因此,我在项目中所做的是定义一个抽象类,并使我的对象从中继承,而不是从SugarRecord中继承,让我们来看一下:
public abstract class BaseSugarRecord extends SugarRecord{
public static <T extends SugarRecord> T checkFor(Class<T> type, final String _id, int id){
List<T> found = find(type, _id+" = ?", String.valueOf(id));
return !found.isEmpty() ? found.get(0) : null;
}
public static <T extends SugarRecord> List<T> listAll(Class<T> type, final String _id, int id){
return find(type, _id+" = ?", String.valueOf(id));
}
}
这里我摘录了如何使自定义对象从这个抽象类继承:
public class Offer extends BaseSugarRecord {
public final static String ID_OFFER = "id_offer";
@SerializedName(ID_OFFER)
private int idOffer;
// ...
这似乎是一个功能:。欢迎任何变通方法…无变通方法,无bug修复->我切换到ActiveAndroid:
。最后一个
API不可用。我在用糖1。3@AdiyatMubarak当前位置他的意思是使用任何方法触发SugarORM。最好不要使用listAll(),因为这可能是一个繁重的操作。
public class Offer extends BaseSugarRecord {
public final static String ID_OFFER = "id_offer";
@SerializedName(ID_OFFER)
private int idOffer;
// ...