2011-09-27 4 views
0

오리엔테이션 변경을 허용하지 않는 애플리케이션의 일부로이 내부 클래스를 가졌습니다 (가로 방향에서 더 의미가 있습니다).Android aSyncTask 및 다른 액티비티를 시작합니다.

private class initialDBQuery extends AsyncTask<SQLiteDatabase, Void, Cursor> { 

    @Override 
    protected Cursor doInBackground(SQLiteDatabase... params) { 
     final SQLiteDatabase mDatabase = params[0]; 
     mCursor = mDatabase.rawQuery("SELECT * FROM database", null); 
     return mCursor; 
    } 

    @Override 
    protected void onPostExecute(Cursor c){ 

     ParentActivity.this.mCursor = mCursor; 
     ParentActivity.this.updateQuery(); 
     mDatabase.close(); //Close database connection ASAP 
    } 

    // can use UI thread here 
    protected void onPreExecute() { 
     ParentActivity.this.mAnimalPager = null; 
     Toast.makeText(ParentActivity.this.getBaseContext(), "Loading Database...", Toast.LENGTH_SHORT).show(); 
    } 
} 

내 메인 UI 다른 활동으로 이어질 다수의 버튼을 가지고, 함수있는 다음 검색을 수행 할 주요 활동 (ParentActivity)에 텐트를 통해 검색 기준을 제공하는 것이다. 나머지 주요 활동은 AsyncTask에서 반환 된 커서에 의존하는 뷰 페이지입니다 (이 업데이트는 정상적으로 작동합니다).

내 문제는 다음과 같습니다. asynctask가 실행되는 동안이 코드를 사용하여 화면 버튼 중 하나를 누릅니다 (다른 활동 시작). "활동을 일시 중지 할 수 없습니다"오류가 발생합니다.

앱이 일시 중지되었을 때 AsyncTask를 실행하는 데 필요한 추가 단계는 무엇입니까?

감사, m 당신을 위해 그 일이 될 수있는 다른 활동을 시작 후 AsyncTask를 취소하고

+0

, 당신은 그것을 해결하기 위해 필요합니다. 전체 stacktrace 게시 및 누군가가 문제가 무엇인지에 대한 아이디어를 줄 수 있습니다. –

+0

예 - 원래 asynctask가 실행되는 동안 다른 작업을로드 할 수 있는지 코드에서 잠시 멈췄습니다. 그것이 문제를 일으켰습니다. stacktrace를 추가 할 때 wait isrunning이 있다고 상상해야합니다. – mAndroid

답변

1

내가 여기에서 겪고있는 문제는 실제로 주요 활동에 대한 뷰 페이지와 관련이 있습니다.

AsyncTask는 PagerAdapter에 대한 커서를 작성하기 때문에 완료 될 때까지 어댑터를 설정하지 않았습니다. 어댑터가 설정되지 않은 경우 ViewPagers 및 activity onPause에 알려진 문제가 있습니다 (here 참조).

public int getCount() { 
    // return the size of the cursor if it has been instantiated; 
    return (mCursor !=null) ? mCursor.getCount() : 0 ; 
} 

어댑터에 setCurrentCursor 방법을 추가 :

이 내가 어댑터에 사용 가능한 커서이없는 경우 0을 반환하는 내 어댑터를 수정 극복하기 위해. 이 방법으로 어댑터를 설정하고 onCreate의 뷰 페이지에 바인딩 한 다음 ASyncTask에서 사용할 수있게되었을 때 어댑터에 커서를 추가 할 수있었습니다.

public void setCurrentCursor(Cursor cu){ 
    this.mCursor = cu; 
    this.notifyDataSetChanged(); 
} 

이제 내가 할 일은 생성 된 커서에 통과하는 AsyncTask를의 onPostExecute 방법에 adapter.setCurrentCursor를 호출합니다.

희망이 도움이됩니다.

감사합니다, m 버그가

0

첫 번째 시도.

+0

정말 취소하고 싶지 않습니다. 다른 활동이 시작 되더라도 계속 실행하는 것이 맞습니다. – mAndroid

+0

다른 활동이 시작된 경우에도 실행하려면 서비스를 사용하고 가능한 경우 논리를 입력하십시오. – Vijay

+0

부모 UI 활동이 일시 중지 된 상태에서 AsyncTask를 실행할 수 없다는 것을 의미합니까? – mAndroid

관련 문제