我有一个提取联系信息的过程,需要很长时间 - 4秒。我不希望它干扰我的应用程序中的用户体验。我有2个问题:

  1. 如何在自己的线程中运行它,因此它不会延迟屏幕上绘制的活动
  2. 有没有办法加速这一点?(我正在做它效率低下吗?)
  3. 我已经尝试从onstart和onresume调用以下oncreate的getContacts()方法,但在所有情况下,在方法完全运行之前,屏幕不会出现。

    这是代码:

    private void getContacts() {
        Thread thread = new Thread() {
            @Override
            public void run() {
                try {
                    Log.d("ManageFriends","getContacts Start");
                    ContentResolver cr = getContentResolver();
                    String[] PROJECTION = new String[] {
                            ContactsContract.CommonDataKinds.Email.CONTACT_ID,
                            ContactsContract.Contacts.DISPLAY_NAME,
                            ContactsContract.CommonDataKinds.Email.ADDRESS,
                            ContactsContract.CommonDataKinds.Email.IS_PRIMARY,
                    };
                    String filter = ContactsContract.CommonDataKinds.Email.ADDRESS + " NOT LIKE '' AND 1 == " +
                            ContactsContract.Contacts.IN_VISIBLE_GROUP + " AND " +
                            ContactsContract.Contacts.DISPLAY_NAME + " NOT LIKE '%@%'";
                    Cursor cur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, PROJECTION, filter, null, null);
                    DBHelper.insertArrayList(db,"Contacts",DBHelper.cursorToArrayList(cur));
                    Log.d("ManageFriends","getContacts End");
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };
        thread.run();
    }
    
    .

    注意:我知道这个过程很慢的大原因 - 我将光标结果转换为arraylist >,然后将其插入一个sqlite db。但如果我能把它拿到工作中,我会很高兴。

有帮助吗?

解决方案

考虑使用daemon线程。

Daemon线程通常用于为应用程序/ applet执行服务(例如加载“TIFDLY BITS”)。用户线程和守护程序线程之间的核心区别是JVM将仅在所有用户线程终止时关闭程序。当不再运行任何用户线程时,JVM终止守护程序线程,包括执行主线程。

p.s。它是一个低优先级线程

来源:

示例

Thread thread = new Thread();

thread.setDaemon(true);

thread.start();
.

编辑!

签出这个 link

其他提示

请考虑使用currsorloader在后台线程中加载来自contentprovider的数据:检索联系人列表

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top