2016-07-14 5 views
0

나는 sqlite 데이터베이스에 몇 가지 목표를 저장하는 안드로이드 응용 프로그램을 만들고 있습니다. 또한 새로운 콘텐츠가있는 경우 온라인 mysql 데이터베이스에서 해당 내용을 가져옵니다.Async를 사용하는 동안 건너 뛴 프레임

그래서 주 활동이 시작되면 목록보기에서 sqlite db의 저장된 데이터를로드 한 다음 Volley로 JsonObjectRequest를 수행합니다. (비동기 작업)

그러나, 주요 활동을

Skipped 88 frames! The application may be doing too much work on its main thread. 
Skipped 34 frames! The application may be doing too much work on its main thread. 

88 프레임 SQLite는 데이터베이스입니다 시작 저장된 모든 데이터를로드 할 때 여전히 나는 다음과 같은 오류를 받고 있어요. 새로 고침을 위해 아래로 쓸어 넘기므로 JsonObjectRequest를 수행하면 34 프레임과 같은 오류가 발생합니다.

AsyncTask에도 sqlite db를로드해야 할 수도 있습니까? 아니면 다른 해결책이 있습니까?

의견을 듣고 싶습니다. 미리 감사드립니다.

Wiljan

편집 :

지금과 같은 비동기에 넣어 :

private class syncData extends AsyncTask<Void, Void, Void> { 
    private KerntaakListAdapter adapter; 

    public syncData(KerntaakListAdapter adapter) { 
     this.adapter = adapter; 
    } 

    /** 
    * The system calls this to perform work in a worker thread and 
    * delivers it the parameters given to AsyncTask.execute() 
    */ 
    @Override 
    protected Void doInBackground(Void... params) { 
     dataSource.syncData(swipeRefreshLayout); 
     return null; 
    } 

    /** 
    * The system calls this to perform work in the UI thread and delivers 
    * the result from doInBackground() 
    */ 
    protected void onPostExecute(String result) { 
     adapter.notifyDataSetChanged(); 
    } 
} 

을 그리고이 그것을 트리거 :

new syncData(adapter).execute(); 

그러나 아직도 날 수 있습니다 건너 뛴 프레임 오류. 프레임이 조금 줄어들지 만 ..

+1

그래서 별도의 스레드에서 데이터베이스를 읽어야합니다. 하지만 앱에 액자가 생기는 다른 것들이있을 수 있습니다. – Eenvincible

답변

1

AsyncTask에도 sqlite db를로드해야 할 수도 있습니까? 아니면 다른 해결책이 있습니까?

예, 기본적으로 모든 데이터베이스 작업은 건너 뛴 프레임으로 이어질 UI 스레드에서 수행됩니다.

백그라운드 스레드에서 쿼리를 수행해야합니다. 자신에게 가장 적합한 것을 사용하십시오. AsyncTask 또는 심지어 Thread 일 수 있습니다.

로더 관리자는 활동에 매우 편리한주기가 첨부되어 있으므로 선택 쿼리에는 Loader 프레임 워크를 사용하는 것이 좋습니다. 또한 기본 데이터를 모니터링하고 ContentObserver을 통해 변경된 데이터를 업데이트 할 수 있습니다.

ContentProvider을 사용하는 경우 삽입, 업데이트 또는 삭제와 같은 다른 쿼리가 필요한 경우 AsyncQueryHandler을 볼 수도 있습니다.

+0

팁을위한 Thnx! 나는 그것을 시도했으나 아직 도움이되지 않을 것이다. 더 자세한 정보는 제 질문에서 제 편집을 읽어주십시오. –

+0

죄송합니다. 그러나 당신이 보여준 코드는 절대적으로 멋지게 보입니다. 여전히 프레임이 건너 뛴 경우 문제가 다른 곳에서 발생했음을 의미합니다. UI 스레드에서 너무 많은 작업을 수행하고 있는지 확인하십시오. 어쩌면 백그라운드로 이동할 수 있고, 데이터를 채우며, 뷰 계층 구조가 비효율적이며 개선 될 수있는 계산 일 수 있습니다. http : // stackoverflow를 살펴보십시오.co.kr/questions/14678593/the-application-may-be-doing-the-its-main-thread에서 계속 작업 할 수 있습니다 .. 행운을 빌어 요 :) –

+0

찾을 수 있으면 새 질문을 업데이트하거나 게시 할 수 있습니다 근본 원인은 여전히 ​​그것을 고칠 방법을 모른다. 지금까지 그것은 좋아 보인다. 의견을 보내실 때 –

관련 문제