0

저는 홈 화면 위젯을 개발 중이며 android sqlite 데이터베이스를 사용하고 있습니다. 나는 데이터베이스 작업을 처리하기 위해 간단한 메소드 (추가, 제거, 레코드 얻기 ...)로 간단한 클래스 DBAdapter을 구현했다. 그것은 작동하지만, 지금 나는 최선의 방법을 생각하고 있습니다.AppWidgetProvider에서 영구 객체 (예 : db 어댑터)를 어디서 저장합니까?

가장 큰 문제는 내 DBAdapter의 인스턴스를 저장하는 방법입니다. Activity를 사용하면 매우 간단합니다. onCreate 메서드에 내 DBAdapter 인스턴스를 만들고 모든 것이 잘됩니다. 하지만 지금은 그런 옵션이 없습니다. AppWidgetProvider과 약간 IntentServices을 사용하고 있습니다. AppWidgetProvider (BroadcastReceiver)은 onReceive 메서드를 실행하는 동안 특정 시간에만 만 존재합니다. IntentService도 필요한 작업을 마친 후 "종료"됩니다. 그래서 어떻게 내 DBAdapter의 인스턴스를 저장할 것인가? 나는 DBAdapter의 새로운 인스턴스를 매번 생성하고 싶지 않다.

이 옵션에 대해 생각해 보았습니다. DBAdapter singleton clas를 만들거나 정적 클래스 & 메서드를 사용하고, 다른 옵션으로 DBAdapter를 sharedPreferences에 저장하거나 직렬화를 사용할 수 있습니다. 그러나 나는 오히려 묻고 싶다. 이 일을 올바르게하는 방법은 무엇입니까? 많이 Thx

답변

0

나를 위해 가장 큰 문제는, 어떻게 (그리고 어디서) 내 DBAdapter의 인스턴스를 저장하는 것입니다.

프로 팁 : 그들은 android.widget.Adapter에서 상속하지 않는 경우 Adapter으로 수업을 종료하지 않습니다.

DBAdapter의 새 인스턴스를 만들 때마다 만들고 싶지 않습니다.

싱글 톤/정적 데이터 멤버로 만들 수 있습니다. 그러나 일단 프로세스가 끝나면 사라질 것이므로 어쨌든 새 프로세스를 다시 작성해야합니다. 따라서 IntentService에 필요에 따라 인스턴스를 만드는 것이 좋습니다. DBAdapter "간단한 메서드 (추가, 제거, 레코드 얻기 ...)"를 사용하면 매우 간단하게 인스턴스화 할 수 있습니다.

또 다른 옵션은 직렬화 이해되지 않는다

에게 된 SharedPreferences에 DBAdapter 저장, 아니면 사용 GSON를 사용합니다. DBAdapter에있는 값의 유일한 데이터는 자체 보존 할 수없는 SQLiteOpenHelper (또는 다른 소스의 SQLiteDatabase)이어야합니다. 또한, 이것은 아마도 DBAdapter의 새 인스턴스를 만드는 것보다 ~ 1000x 느려질 것입니다.

+0

thx, 나는 당신의 충고를 따를 것입니다;) – qkx

+0

하지만, 어떻게하면 다중 서비스로부터 DB에 쓸 필요가 있습니까? 예를 들어 dataservice는 일정한 간격으로 백그라운드에서 실행되고 db에 신선한 데이터를 작성하고 전경에서 나는 사용자에 따라 몇 가지 글을 쓰고 있습니다. -이 글이 같은 시간에 (둘 다 일어나는 경우) 예외가 발생하면 'android.database'예외가 발생합니다. sqlite.SQLiteException : 오류 코드 5 : 데이터베이스 잠김'. 지금 뭐야? 자세한 내용은 다음을 참조하십시오. http://stackoverflow.com/questions/10798233/concurrent-writing-to-android-database-from-multiply-services – qkx