설치 : FirstActivity가 SecondActivity를 열면 SecondActivity는 사용자에게 이미지를 선택하고 제목을 제공하도록 요청합니다. 사용자가 끝나면 대량 저장을 요구하는 saveToDatabase 메소드를 호출하는 "저장"버튼을 클릭합니다. 사용자가 "저장"버튼을 클릭 한 후 FirstActivity로 돌아가도록하는 것이 좋습니다.Provider 메소드를 호출 한 직후에 finish()를 직접 호출해도 괜찮습니까?
이 현재 설정입니다 :
private void saveToDatabase() {
int arraySize = beanList.size();
ContentValues[] valuesArray = new ContentValues[arraySize];
ContentValues values;
String imageuri;
String title;
int counter = 0;
for(Bean b : beanList){
imageuri = b.getImageUri();
title = b.getImageTitle();
values = new ContentValues();
values.put(CollectionsTable.COL_NAME, nameOfCollection);
values.put(CollectionsTable.COL_IMAGEURI, imageuri);
values.put(CollectionsTable.COL_TITLE, title);
values.put(CollectionsTable.COL_SEQ, counter +1);
valuesArray[counter] = values;
counter++;
}
getContentResolver().bulkInsert(CollectionsContentProvider.CONTENT_URI, valuesArray);
// Does this squash the db/provider call? This is working now but will it always?
finish();
}
... 그리고 그것은 작동하지만 난 모든 시간을 작동하지 않을 수있는 느린 두려움을 가지고있다. 그래서 내 질문에 finish()
getContentResolver().bulk...
직후에 문제가 무엇입니까? 내가하려는 일을 처리하는 더 좋은 방법이 있습니까 (& 데이터베이스에 저장 한 사용자 이벤트에 대한 응답으로 이전 활동으로 사용자를 되돌림)? 고맙습니다. 추신 : 이것은 내 첫 번째 응용 프로그램입니다, 만약 당신이 더 잘 다루어 져야하는 코드를 보았다면, 나는 그것에 관한 모든 귀입니다.
UI 스레드에서 콘텐츠 공급자로 작업하는 것은 좋지 않습니다. 콘텐츠 공급자와의 모든 상호 작용을 작업자 스레드에 추출해야합니다. 그렇지 않으면 콘텐츠 공급자와의 작업 중 일부 장기 실행 작업이 실행되는 경우 UI 결함이 발생할 수 있습니다. 따라서 사용자가 저장 버튼을 클릭하면 새로운 스레드를 시작하여 모든 데이터를 저장하고 즉시 finish()를 호출하여 작업을 닫을 수 있습니다. 안드로이드에서 스레드에 대해 읽을 수 있습니다 [여기] (http://developer.android.com/guide/components/processes-and-threads.html#Threads) – makovkastar
@makovkastar, 고마워요. 이것은 다른 스레드에서 마술처럼 생기는 ContentProvider에 대한 호출이기 때문에 생각했습니다. [이 튜토리얼] (http://www.mysamplecode.com/2012/11/android-database-content-provider.html)의 "CountryEditActivity"에서 Provider에 대한 호출은 AsynTask? –
아니요, 수동으로 새 스레드를 만들어야합니다.이 스레드는 'getContentResolver(). bulkInsert (...)'메서드를 호출 한 후에 자동으로 생성되지 않습니다. 예, AsynTask는 별도의 스레드에서 작업하는 좋은 방법입니다. 그러나 AsyncTask의 주요 목적은 작업을 시작하기 전, 실행 중 및 완료 후에 UI를 업데이트 할 수있는 가능성을 제공하는 것입니다. 하지만 귀하의 경우 UI 스레드와 아무런 상호 작용이 없으므로 UI 스레드를 사용할 필요가 없습니다. 그러나 데이터를 저장하고 저장 한 후에 저장하려는 경우 활동을 닫습니다. AsyncTask가 최선의 선택입니다. – makovkastar