2

앱 메뉴 사용을 시작하거나 중지 할 수있는 백그라운드 서비스가 있습니다. 이 서비스는 에뮬레이터 장치 부팅시 시작할 수도 있습니다. 하지만 이상한 일은 장치 부팅시 토스트 메시지를 볼 뿐이고 jobThread가 시작되지 않고 메뉴에서 트리거해도 ... 나는 여전히 토스트 메시지 만 볼 수 있습니다.Android 백그라운드 서비스 클래스 "onStartCommand"메소드가 기기 시작시 모든 코드를 수행하지 않습니다.

그러나 AndrodiStudio를 다시 시작하고 응용 프로그램을 실행하고 메뉴에서 서비스를 시작하면 정상적으로 작동합니다. onStartCommand 내부의 코드가 장치가 다시 시작될 때 부분적으로 만 실행되는 것처럼 보입니다. 뭐가 잘못 되었 니?

.. taskThread는 logcat에 메시지를 인쇄하는 동일한 calss (this) 서비스 클래스 내부의 메소드를 호출합니다. 내 서비스 클래스 내부

는 :

우리는 부트 업에서 시작했다 애플리케이션에 근무
@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    serviceRunning = true; 
    Toast.makeText(this,"onStartCommand!...Service Started", Toast.LENGTH_LONG).show(); 
    Thread taskThread = new Thread(new finalRunnableInnerClass(startId)); 
    taskThread.start(); 
    return START_STICKY; 
} 

답변

1

, 우리는 첫 번째 로그 메시지가 디바이스의 로그 버퍼에 기록되지 않은 것으로 나타났습니다. 약간의 조사가 끝나자 우리는 부팅 후 Log 클래스의 메소드가 작동하기 전에 시간이 걸린다는 결론에 도달했습니다.

새로운 스레드가 작동한다는 유일한 표시가 logcat의 메시지 일 경우 스레드가 올바르게 실행되지만 로그 메시지가 표시되지 않을 수도 있습니다.

로그를 파일에 기록하는 기능을 추가하여 포스트 부트 디버깅 문제를 해결했습니다. 부팅 후 기능을 테스트하고 싶을 때마다 WRITE_LOGS_TO_FILE 플래그가 설정된 코드를 컴파일 한 다음 장치에서 로그 파일을 가져옵니다.

+0

예! 그건 사실이야! 고맙습니다! –

+0

그 경우에는 대답을 수락해야합니다) – Vasiliy

0

답변 해 주셔서 감사합니다. 네, 실제로 사실이며 사실입니다!. 내 스레드가 잘 실행되었다!. 나는이 코드를 my backgroundService 스레드의 run() 메서드 안에 넣음으로써이를 확인했다.

Handler handler = new Handler(Looper.getMainLooper()); handler.post(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(),"running",Toast.LENGTH_SHORT).show(); } });

관련 문제