내 응용 프로그램에서 처리기를 사용하여 무작위로 실행 한 후에 실행 가능 파일을 실행하는 서비스가 있습니다. 이 프로그램은 몇 시간 동안 잘 작동합니다. 나는 응용 프로그램을 다시 시작할 수 있습니다, 응용 프로그램 강제 닫히고 자마자, 또한몇 시간 후 처리기가 NullPointerException을 던지기
java.lang.NullPointerException
at com.martin.ontime.OnTimeService$2.run(OnTimeService.java:224)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:144)
at android.app.ActivityThread.main(ActivityThread.java:4937)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
및 예외가 다른 몇 시간 동안 발생되지 않습니다 : 갑자기, 프로그램은 다음 추적에 NullPointerException이 발생합니다 . 핸들러와 관련된 약식 코드는 다음과 같습니다.
public class AppService extends Service{
/**XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
INITIATE ALL THE GLOBAL VARIABLES
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
//Handler that times the processes
private Handler h = new Handler();
/**XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
/**XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
EXECUTE ALL CREATE FUNCTIONS
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
@Override
public void onCreate(){
super.onCreate();
//Clear all timers
h.removeCallbacks(setTime);
h.removeCallbacks(setAuto);
//Set a timer to start the processes
h.postDelayed(setAuto, 0);
}
/**XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
/**XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
EXECUTE THESE FUNCTIONS WHEN SERVICE IS STOPPED
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
@Override
public void onDestroy(){
//Clear all timers
h.removeCallbacks(setTime);
h.removeCallbacks(setAuto);
}
/**XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
/**XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
HANDLER RUNNABLE
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
//Runnable
private Runnable setAuto = new Runnable() {
public void run(){
//Create a random number generator
Random r = new Random();
//Determine a random amount of time until time is changed
long d = r.nextInt(5) * 60 * 1000;
//Wait
h.postDelayed(setTime, d);
}
};
//Runnable used to set a random allowance
private Runnable setTime = new Runnable() {
public void run(){
try {
//Create a random number generator
Random r = new Random();
//Determine a random amount of time until time is changed
long d = r.nextInt(30) * 60 * 1000 + 1800000;
//Wait
h.postDelayed(setAuto, d);
***TRY/CATCH SURROUNDS A DATA OUTPUT STREAM***
}
catch (IOException e){
e.printStackTrace();
}
}
};
/**XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
}
이 서비스에이 문제가있는 것으로 보이는 프로그램이 있습니다. 나는 핸들러와 실행 파일에 관련된 코드를 복사하고 두 프로그램에서 공유한다. 이 문제를 해결하기에 충분한 정보라고 생각합니다. 더 이상 정보가 필요하다면 필자는 반드시 공백을 채울 것입니다. 이것들과 나의 미래의 애플 리케이션을위한 큰 도움이 될 것입니다!
OnTimeService.java의 224 행은 어디에 있습니까? –