2012-03-11 2 views
3
내가

안드로이드 앱 높은 CPU 사용량

작업이 서비스 하지만 안드로이드 시스템과 같은 startet있는 긴 시간에 높은 CPU 사용과 함께 작업을 할 수있는 응용 프로그램을 프로그래밍하고

때문에의 응용 프로그램을 죽이고 높은 CPU 사용량

그래서 CPU 사용량을 줄이려면 어떻게해야합니까? 서비스를 중지하지 않도록 시스템을 설정 하시겠습니까?

서비스 :

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(); 


    } 
    } 
} 
+0

코드를 최적화하여 CPU 사용량을 줄일 수 있지만 코드를 보지 않아도 신뢰할 수있는 대답을 제시 할 수 없습니다. – bos

+0

코드를 추가했습니다 –

+2

절대로 절대로 절대로 경로를 배선하지 마십시오. 또한 파일을 적절한 위치에 두십시오. 현재 위치에서'dialog.db'를 사용할 수 있다는 보장은 없으며 가지고있는 곳에'backup /'디렉토리를 만들 수 있습니다. 'getFilesDir()'를 모든 내부 파일 저장소의 루트로 사용하십시오. – CommonsWare

답변

2

당신은 작은 조각으로 작업을 분할 시도하고 짧은 시간 동안 Thread.sleep()을 배치 할 수 있습니다. 그만큼이 같은 루프에 일부 코드를 변경하지 않다면 :

오래된 코드 :

object.move(1000); 

새로운 코드 :

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

의 예는 move() 작업이 주어진 매개 변수 인 경우 시간이 더 걸리는 경우 이전 코드는 프로그램이 응답하지 않을 수 있습니다. 새로운 코드는 Thread.sleep() 동안 안드로이드가 여러분의 프로그램과 comunicate 할 수있게 해줄 것입니다, 그래서 앱은 작동을 멈추지 않습니다.

@edit 코드에서 볼 수 있듯이 여러 개의 while 루프가 있습니다. Thread.sleep (10)을 안에 넣으십시오.

+0

응답이 없습니다. –

0

이 코드는 주 스레드에서 실행되는 서비스에 직접 넣을 것입니다. 대신 백그라운드 스레드에 넣어야합니다. 대신 IntentService을 사용하거나 서비스에서 작업자 스레드를 시작하십시오.

관련 문제