2017-11-28 1 views
0

기존 응용 프로그램에보고 기능을 추가하려고합니다. 이 목적을 위해 JSON의 이벤트를 서버 응용 프로그램에 HTTPS을 통해 보내고 있습니다.이벤트 유형 로그 저장

서버에 보낼 수없는 이벤트 개체 (인터넷이 없거나 서버에 연결할 수 없음 ...)를 기억해야합니다. 우리는 SQLite 데이터베이스에 이벤트를 저장하고 저장 용량 초과를 방지하기 위해 24 시간이 넘은 모든 이벤트를 삭제하려고합니다.

또 다른 옵션은 JSON 객체를 파일에 쓰고 서버에 보낼 수 없을 때 각각의 새 이벤트를 연결하는 것입니다. 이 솔루션의 문제점은 24 시간이 지난 로그를 삭제하기가 어렵다는 것입니다.

다음과 같이 열이있는 테이블을 이벤트로 저장합니다.

| 이드 | json | created_at |

누구든지이 사용 사례에 대한 모범 사례를 권장 할 수 있습니까?

현재 우리는 sqlite 솔루션을 사용하는 경향이 있지만 우리가 알지 못하는 경고가 있는지 궁금해하고 있습니다.

답변

0

타사 라이브러리를 사용해도 상관없는 경우 android-priority-jobqueue을 권해드립니다. 당신이하려는 일을 쉽게 달성 할 수 있습니다. 당신은 언제나 일자리를 창출 할 수 있으며 그 일은 스스로 처리 할 수 ​​있습니다. 네트워크가 필요하다면 설정할 수 있습니다. 영구적 인 경우 (네트워크가 없을 때 DB에 저장) 자신의 재시도 논리를 사용자 정의 할 수도 있습니다.

여기에 약간의 예가 있습니다.

public class PostTweetJob extends Job { 
    public static final int PRIORITY = 1; 
    private String text; 
    public PostTweetJob(String text) { 
     // This job requires network connectivity, 
     // and should be persisted in case the application exits before job is completed. 
     super(new Params(PRIORITY).requireNetwork().persist()); 
    } 
    @Override 
    public void onAdded() { 
     // Job has been saved to disk. 
     // This is a good place to dispatch a UI event to indicate the job will eventually run. 
    } 
    @Override 
    public void onRun() throws Throwable { 
     // yours code here 
    } 
    @Override 
    protected RetryConstraint shouldReRunOnThrowable(Throwable throwable, int runCount, 
      int maxRunCount) { 
     // An error occurred in onRun. 
     return RetryConstraint.createExponentialBackoff(runCount, 1000); 
    } 
} 

당신은 이것을 이렇게 부릅니다.

jobManager.addJobInBackground(new PostTweetJob("It works")); 
+0

이렇게 많은 작업이 잘 처리됩니까? Google의 앱은 하루에 최대 1 만 개의 이벤트를 생성 할 수 있습니다. –

+0

나는 그렇게 생각한다. 그것은 SQLite internaly를 사용하고 있으므로 괜찮을 것이라고 생각합니다. –

0

사용 JobService (안드로이드 5+ - 위의 막대 사탕과) 및 알람 관리기는 (안드로이드 SDK < 21 - 사전 롤리팝)이 솔루션 u는 어떤 작업을 예약 할 수 있으며 수행 할 것입니다. JobService는 tjis 목적으로 rxactely (다른 작업을 예약하고 수행 할 수 있습니다) 어쩌면 JobIntentService를 시도해 볼 수 있습니다. kitkat (android 4+) 장치에서 작동합니다.

P.S. 그런 경우 firebase/google 서비스 (예 : FirebaseDispatcher)와 같은 타사 라이브러리 및 기타 종속성이 필요하지 않습니다.