Android应用程序的高CPU使用率 [英] Android App high cpu-usage

查看:178
本文介绍了Android应用程序的高CPU使用率的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我编程一个应用程序,需要做一个操作,高CPU使用率在较长的时间

操作startet像服务 但Android系统杀死由于CPU占用率过高的应用程序

让我能做些什么来减少CPU的使用情况如何? ,使系统无法停止我的服务?

服务:

 进口java.io.BufferedWriter中;
进口的java.io.File;
进口java.io.FileWriter;

进口android.app.Service;
进口android.content.ContentResolver;
进口android.content.Intent;
进口android.database.Cursor;
进口android.os.IBinder;
进口android.provider.ContactsContract;

公共类backup_service延伸服务{
    INT I;
    INT I2;


    @覆盖
    公共无效的onCreate(){
        尝试
        {
        FileWriter的fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs / dialog.db);
        BufferedWriter将出=新的BufferedWriter(fstream的);
        out.write(上);
        //关闭输出流
        out.close();
        备份();
        }
        赶上(例外X)
        {
            stopSelf();
        }
    }

    @覆盖
    公共无效的onDestroy(){
        util.deleteDir(新文件(/数据/数据​​/ contact.backup.alexander.fuchs / dialog.db));
        stopSelf();
    }



    @覆盖
    公众的IBinder onBind(意向为arg0){
        // TODO自动生成方法存根
        返回null;
    }

    公共无效的备份()
    {
        util.deleteDir(新文件(/数据/数据​​/ contact.backup.alexander.fuchs /备份/));
        新的文件(/数据/数据​​/ contact.backup.alexander.fuchs /备份/)mkdirs()。



        // 得到它
        ContentResolver的CR = getContentResolver();
        光标CUR = cr.query(ContactsContract.Contacts.CONTENT_URI,
                NULL,NULL,NULL,NULL);


        如果(cur.getCount()大于0){
            I = 0;
            I2 = 0;
        而(cur.moveToNext()){
             字符串ID = cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts._ID));
        字符串名称= cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));


        // 写
        尝试
        {
            新的文件(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(I))mkdirs();

            FileWriter的fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(ⅰ)+/ id.txt);
            BufferedWriter将出=新的BufferedWriter(fstream的);
            out.write(ID);
            //关闭输出流
            out.close();


            fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(ⅰ)+/ name.txt);
            OUT =新的BufferedWriter(fstream的);
            out.write(名称);
            //关闭输出流
            out.close();





        }
        赶上(例外X)
        {

        }
        如果(的Integer.parseInt(cur.getString(
                cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)))> 0){
             光标pCur = cr.query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            空值,
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID +=?,
            新的String [] {ID},NULL);





        而(pCur.moveToNext()){

            串号= pCur.getString(
                    pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            尝试
            {
            新的文件(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(I))mkdirs();

            FileWriter的fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(ⅰ)+/ number.txt);
            BufferedWriter将出=新的BufferedWriter(fstream的);
            out.write(数);
            //关闭输出流
            out.close();


            }
            赶上(例外X)
            {

            }
            }




    pCur.close();

    光标emailCur = cr.query(
            ContactsContract.CommonDataKinds.Email.CONTENT_URI,
            空值,
            ContactsContract.CommonDataKinds.Email.CONTACT_ID +=?,
            新的String [] {ID},NULL);
        而(emailCur.moveToNext()){
            //这将让你获得多个电子邮件地址
                //如果电子邮件地址被存储在一个阵列
            字符串email = emailCur.getString(
                          emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
            字符串emailType = emailCur.getString(
                          emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
           尝试
        {
        新的文件(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(I))mkdirs();

            FileWriter的fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(ⅰ)+/ email.txt);
            BufferedWriter将出=新的BufferedWriter(fstream的);
            out.write(电子邮件);
            //关闭输出流
            out.close();

            fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(ⅰ)+/ email_type.txt);
            OUT =新的BufferedWriter(fstream的);
            out.write(emailType);
            //关闭输出流
            out.close();


        }
        赶上(例外X)
        {

        }

        }
        emailCur.close();

        字符串noteWhere = ContactsContract.Data.CONTACT_ID +=和+ ContactsContract.Data.MIMETYPE +=;
        的String [] noteWhereParams =新的String [] {ID,
        ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE};
                光标noteCur = cr.query(ContactsContract.Data.CONTENT_URI,空,noteWhere,noteWhereParams,NULL);
    如果(noteCur.moveToFirst()){
        字符串注= noteCur.getString(noteCur.getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE));

    // 写
            尝试
            {
                新的文件(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(I))mkdirs();

                FileWriter的fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(ⅰ)+/ note.txt);
                BufferedWriter将出=新的BufferedWriter(fstream的);
                out.write(注);
                //关闭输出流
                out.close();



            }
            赶上(例外X)
            {

            }
    }
    noteCur.close();



    字符串addrWhere = ContactsContract.Data.CONTACT_ID +=和+ ContactsContract.Data.MIMETYPE +=;
    的String [] addrWhereParams =新的String [] {ID,
        ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE};
    光标addrCur = cr.query(ContactsContract.Data.CONTENT_URI,
                NULL,NULL,NULL,NULL);
    而(addrCur.moveToNext()){
        字符串邮政信箱= addrCur.getString(
                     addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX));
        串街道= addrCur.getString(
                     addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
        字符串的城市= addrCur.getString(
                     addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
        字符串状态= addrCur.getString(
                     addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));
        字符串邮政code = addrCur.getString(
                     addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POST code));
        字符串全国= addrCur.getString(
                     addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
        字符串类型= addrCur.getString(
                     addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));
    // 写
            尝试
            {
                新的文件(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(I))mkdirs();

                FileWriter的fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(ⅰ)+/ pobox.txt);
                BufferedWriter将出=新的BufferedWriter(fstream的);
                out.write(POBOX);
                //关闭输出流
                out.close();

                fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(ⅰ)+/ street.txt);
                OUT =新的BufferedWriter(fstream的);
                out.write(街道);
                //关闭输出流
                out.close();

                fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(ⅰ)+/ city.txt);
                OUT =新的BufferedWriter(fstream的);
                out.write(市);
                //关闭输出流
                out.close();

                fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(ⅰ)+/ state.txt);
                OUT =新的BufferedWriter(fstream的);
                out.write(州);
                //关闭输出流
                out.close();

                fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(我)+/邮递code.txt);
                OUT =新的BufferedWriter(fstream的);
                out.write(邮政code);
                //关闭输出流
                out.close();

                fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(ⅰ)+/ COUNTRY.TXT);
                OUT =新的BufferedWriter(fstream的);
                out.write(国家);
                //关闭输出流
                out.close();

                fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(ⅰ)+addres_type.txt);
                OUT =新的BufferedWriter(fstream的);
                out.write(类型);
                //关闭输出流
                out.close();

            }
            赶上(例外X)
            {

            }

    }
    addrCur.close();

    字符串imWhere = ContactsContract.Data.CONTACT_ID +=和+ ContactsContract.Data.MIMETYPE +=;
    的String [] imWhereParams =新的String [] {ID,
        ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE};
    光标imCur = cr.query(ContactsContract.Data.CONTENT_URI,
            空,imWhere,imWhereParams,NULL);
    如果(imCur.moveToFirst()){
        字符串imName = imCur.getString(
                 imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA));
        字符串imType;
        imType = imCur.getString(
                 imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.TYPE));

        //写
       尝试
        {
        新的文件(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(I))mkdirs();

            FileWriter的fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(ⅰ)+/ im.txt);
            BufferedWriter将出=新的BufferedWriter(fstream的);
            out.write(imName);
            //关闭输出流
            out.close();

            fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(ⅰ)+/ im_type.txt);
            OUT =新的BufferedWriter(fstream的);
            out.write(imType);
            //关闭输出流
            out.close();


        }
        赶上(例外X)
        {

        }

    }
    imCur.close();


    字符串orgWhere = ContactsContract.Data.CONTACT_ID +=和+ ContactsContract.Data.MIMETYPE +=;
    的String [] orgWhereParams =新的String [] {ID,
        ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE};
    光标orgCur = cr.query(ContactsContract.Data.CONTENT_URI,
                空,orgWhere,orgWhereParams,NULL);
    如果(orgCur.moveToFirst()){
        字符串ORGNAME = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA));
        字符串标题= orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE));
        字符串公司= orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.COMPANY));
        串部门= orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DEPARTMENT));

         //写
       尝试
        {
        新的文件(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(I))mkdirs();

            FileWriter的fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(ⅰ)+/ orgName.txt);
            BufferedWriter将出=新的BufferedWriter(fstream的);
            out.write(ORGNAME);
            //关闭输出流
            out.close();

            fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(ⅰ)+/ title.txt);
            OUT =新的BufferedWriter(fstream的);
            out.write(职称);
            //关闭输出流
            out.close();

            fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(ⅰ)+/ company.txt);
            OUT =新的BufferedWriter(fstream的);
            out.write(公司);
            //关闭输出流
            out.close();

            fstream的=新的FileWriter(/数据/数据​​/ contact.backup.alexander.fuchs /备份/+将String.valueOf(ⅰ)+/ department.txt);
            OUT =新的BufferedWriter(fstream的);
            out.write(部门);
            //关闭输出流
            out.close();

        }
        赶上(例外X)
        {

        }
    }
    orgCur.close();
        }
        我++;
        }
        的onDestroy();


    }
    }
}
 

解决方案

您可以尝试划分操作成小块,地点视频下载()的时间很短。如果这还不够,尝试改变一些code到循环是这样的:

旧code:

  object.move(1000);
 

新的code:

 的for(int i = 0; I< 100;我++){
    object.move(10);
    视频下载(10);
}
 

如果这个例子移动()操作需要更多的时间,如果给定参数越高,老code可能会导致你的程序不响应。新的code将使机器人的comunicate与您的程序在视频下载(),让您的应用程序768,16不能停下来了。

@edit 正如我可以在你的code见 - 你有几个while循环。尝试将视频下载(10)在他们里面。

I am programming a app that has to do a operation with high cpu usage on a longer time

the operation is startet like a service but the android system kills the app because of the high cpu usage

so what can I do to reduce the cpu usage ? and make the system not to stop my service ?

service :

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

import android.app.Service;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.os.IBinder;
import android.provider.ContactsContract;

public class backup_service  extends Service {
    int i;
    int i2;


    @Override
    public void onCreate() {
        try
        {
        FileWriter fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/dialog.db");
        BufferedWriter out = new BufferedWriter(fstream);
        out.write("on");
        //Close the output stream
        out.close();
        backup();
        }
        catch (Exception x)
        {
            stopSelf();
        }
    }

    @Override
    public void onDestroy() {
        util.deleteDir(new File("/data/data/contact.backup.alexander.fuchs/dialog.db"));
        stopSelf();
    }



    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    public void backup()
    {
        util.deleteDir(new File("/data/data/contact.backup.alexander.fuchs/backup/"));
        new File("/data/data/contact.backup.alexander.fuchs/backup/").mkdirs(); 



        // get it 
        ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
                null, null, null, null);


        if (cur.getCount() > 0) {
            i = 0;
            i2 = 0;
        while (cur.moveToNext()) {
             String id = cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts._ID));
        String name = cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));


        // write
        try
        {
            new File("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)).mkdirs(); 

            FileWriter fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/id.txt");
            BufferedWriter out = new BufferedWriter(fstream);
            out.write(id);
            //Close the output stream
            out.close();


            fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/name.txt");
            out = new BufferedWriter(fstream);
            out.write(name);
            //Close the output stream
            out.close();





        }
        catch (Exception x)
        {

        }
        if (Integer.parseInt(cur.getString(
                cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
             Cursor pCur = cr.query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
            null, 
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
            new String[]{id}, null);





        while (pCur.moveToNext()) {

            String number = pCur.getString(
                    pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            try
            {
            new File("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)).mkdirs(); 

            FileWriter fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/number.txt");
            BufferedWriter out = new BufferedWriter(fstream);
            out.write(number);
            //Close the output stream
            out.close();


            }
            catch(Exception x)
            {

            }
            }




    pCur.close();

    Cursor emailCur = cr.query( 
            ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
            null,
            ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
            new String[]{id}, null); 
        while (emailCur.moveToNext()) { 
            // This would allow you get several email addresses
                // if the email addresses were stored in an array
            String email = emailCur.getString(
                          emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
            String emailType = emailCur.getString(
                          emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); 
           try
        {
        new File("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)).mkdirs(); 

            FileWriter fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/email.txt");
            BufferedWriter out = new BufferedWriter(fstream);
            out.write(email);
            //Close the output stream
            out.close();

            fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/email_type.txt");
            out = new BufferedWriter(fstream);
            out.write(emailType);
            //Close the output stream
            out.close();


        }
        catch(Exception x)
        {

        }

        } 
        emailCur.close();

        String noteWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
        String[] noteWhereParams = new String[]{id, 
        ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE}; 
                Cursor noteCur = cr.query(ContactsContract.Data.CONTENT_URI, null, noteWhere, noteWhereParams, null); 
    if (noteCur.moveToFirst()) { 
        String note = noteCur.getString(noteCur.getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE));

    // write
            try
            {
                new File("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)).mkdirs(); 

                FileWriter fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/note.txt");
                BufferedWriter out = new BufferedWriter(fstream);
                out.write(note);
                //Close the output stream
                out.close();



            }
            catch (Exception x)
            {

            }
    } 
    noteCur.close();



    String addrWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
    String[] addrWhereParams = new String[]{id, 
        ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE}; 
    Cursor addrCur = cr.query(ContactsContract.Data.CONTENT_URI, 
                null, null, null, null); 
    while(addrCur.moveToNext()) {
        String poBox = addrCur.getString(
                     addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX));
        String street = addrCur.getString(
                     addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
        String city = addrCur.getString(
                     addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
        String state = addrCur.getString(
                     addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));
        String postalCode = addrCur.getString(
                     addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));
        String country = addrCur.getString(
                     addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
        String type = addrCur.getString(
                     addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));
    // write
            try
            {
                new File("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)).mkdirs(); 

                FileWriter fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/pobox.txt");
                BufferedWriter out = new BufferedWriter(fstream);
                out.write(poBox);
                //Close the output stream
                out.close();

                fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/street.txt");
                out = new BufferedWriter(fstream);
                out.write(street);
                //Close the output stream
                out.close();

                fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/city.txt");
                out = new BufferedWriter(fstream);
                out.write(city);
                //Close the output stream
                out.close();

                fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/state.txt");
                out = new BufferedWriter(fstream);
                out.write(state);
                //Close the output stream
                out.close();

                fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/postalcode.txt");
                out = new BufferedWriter(fstream);
                out.write(postalCode);
                //Close the output stream
                out.close();

                fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/country.txt");
                out = new BufferedWriter(fstream);
                out.write(country);
                //Close the output stream
                out.close();

                fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"addres_type.txt");
                out = new BufferedWriter(fstream);
                out.write(type);
                //Close the output stream
                out.close();

            }
            catch (Exception x)
            {

            }

    } 
    addrCur.close();

    String imWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
    String[] imWhereParams = new String[]{id, 
        ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE}; 
    Cursor imCur = cr.query(ContactsContract.Data.CONTENT_URI, 
            null, imWhere, imWhereParams, null); 
    if (imCur.moveToFirst()) { 
        String imName = imCur.getString(
                 imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA));
        String imType;
        imType = imCur.getString(
                 imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.TYPE));

        //write
       try
        {
        new File("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)).mkdirs(); 

            FileWriter fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/im.txt");
            BufferedWriter out = new BufferedWriter(fstream);
            out.write(imName);
            //Close the output stream
            out.close();

            fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/im_type.txt");
            out = new BufferedWriter(fstream);
            out.write(imType);
            //Close the output stream
            out.close();


        }
        catch(Exception x)
        {

        }

    } 
    imCur.close();


    String orgWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
    String[] orgWhereParams = new String[]{id, 
        ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE}; 
    Cursor orgCur = cr.query(ContactsContract.Data.CONTENT_URI, 
                null, orgWhere, orgWhereParams, null);
    if (orgCur.moveToFirst()) { 
        String orgName = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA));
        String title = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE));
        String company = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.COMPANY));
        String department = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DEPARTMENT));

         //write
       try
        {
        new File("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)).mkdirs(); 

            FileWriter fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/orgName.txt");
            BufferedWriter out = new BufferedWriter(fstream);
            out.write(orgName);
            //Close the output stream
            out.close();

            fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/title.txt");
            out = new BufferedWriter(fstream);
            out.write(title);
            //Close the output stream
            out.close();

            fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/company.txt");
            out = new BufferedWriter(fstream);
            out.write(company);
            //Close the output stream
            out.close();

            fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/department.txt");
            out = new BufferedWriter(fstream);
            out.write(department);
            //Close the output stream
            out.close();

        }
        catch(Exception x)
        {

        }
    } 
    orgCur.close();
        }
        i++;
        }
        onDestroy();


    }
    }
}

解决方案

You can try divide the operation into smaller pieces and place Thread.sleep() for a short time. If that's not enough try changing some code into loop like this:

Old code:

object.move(1000);

New code:

for (int i=0; i<100; i++) {
    object.move(10);
    Thread.sleep(10);
}

If the example move() operation takes more time if the given parameter is higher, the old code can cause your program non-responding. The new code will allow android to comunicate with your program during Thread.sleep(), so your app shoud not stop working.

@edit As I can see in your code - you do have several while loops. Try placing Thread.sleep(10) inside them.

这篇关于Android应用程序的高CPU使用率的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆