2017-11-17 5 views
0

내 Android 애플리케이션에서 Firebase Realtime Database를 사용합니다. 나는 데이터베이스 최우선 방법에서 읽을 때 onDataChange(DataSnapshot dataSnapshot)Android에서 Firebase Realtime Database에 대한 수신기를 설정하면 애플리케이션이 백그라운드에서 전력을 소비합니다.

myRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) 
     String value = dataSnapshot.getValue(String.class); 
     Log.d(TAG, "Value is: " + value); 
    } 

    @Override 
    public void onCancelled(DatabaseError error) 
     Log.w(TAG, "Failed to read value.", error.toException()); 
    } 
}); 

그것은 좋은 일입니다 만, 아침에 (안드로이드 7.0) 내 장치 내 앱이 백그라운드에서 전력을 소비하는 것을 경고 줘. 문서화 작업에서 활동이 일시 중지/파괴되면 어떻게 설정되지 않은 청취자를 찾지 못합니다.

+0

당신이 리스너를 추가하는 데 사용하는 코드를 공유 할 수 있습니다 여기에

는 그래픽 표현인가? – Grimthorr

+0

응용 프로그램이 포 그라운드에서든 백그라운드에서든 코드를 실행하면 항상 힘을 소비하게됩니다. –

+0

나는 힌트에서의 standart 코드를 사용 myRef.addValueEventListener (새 ValueEventListener() { @Override 공공 무효 onDataChange (DataSnapshot dataSnapshot) { 문자열 값 = dataSnapshot.getValue (String.class) Log.d (TAG " 값 : "+ 값); } }); – Anddever

답변

1

이 문제를 방지하려면 활동의 라이프 사이클에 따라 리스너를 제거해야합니다. 당신이 onStart에 청취자를 추가 한 경우

databaseReference.removeEventListener(valueEventListener); 

그래서, 당신은 onStop에서 제거해야 : 그래서, 다음 코드 줄을 사용하십시오. onResume에 수신기를 추가 한 경우 에서 제거해야합니다. onCreate에 수신기를 추가 한 경우 onDestroy에서 제거해야합니다.

그러나 항상 onDestroy이 호출되는 것은 아닙니다.

enter image description here

+0

답장을 보내 주셔서 감사합니다. 검색 대상이라고 생각하지만 경고가 나타나지 않는지 확인하고 싶습니다. , 나는 하루 동안 시험 할 것이고, 그렇지 않다면 나는 당신의 대답을 옳은 것으로 받아 들일 것입니다. – Anddever

+0

좋습니다. 행운을 빈다. 나는 너의 소식을 기다릴거야. –

관련 문제