Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Sugar ORM在init上阻塞UI线程_Android_Multithreading_Performance_Orm_Sugarorm - Fatal编程技术网

Android Sugar ORM在init上阻塞UI线程

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

我正在为我的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: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();
    }
    
  • 我希望您觉得这个解决方法足够有用

    编辑:如果使用不带.last()方法的版本,可以通过执行
    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;
        // ...