我在START_STICKY
模式如何殺死
以下的服務創建的應用程序後,堅持在服務對象和變量是我的服務類
public class KeepAliveStatusMessageService extends Service {
private Timer keepAliveStatusMessageTimer;
private TimerTask timerJob;
private JsHandler javaSHandler;
protected void doInBackground() {
javaSHandler =LoginActivity.javaSHandler; //JSHandlerSingleton.getInstance().getJavaSHandlerLogin();
keepAliveStatusMessageTimer = new Timer();
AllTimer.getInstance().setKeepAliveStatusMessageTimer(keepAliveStatusMessageTimer);
timerJob = new TimerTask() {
@Override
public void run() {
UserInformationProvider userInformationProvider = UserInformationProvider.getInstance();
javaSHandler =GladiusLoginActivity.javaSHandler;
Log.v("Service","called");
javaSHandler.keepAliveStatusMessage(userInformationProvider.getIpAddress(), userInformationProvider.getUsername(), userInformationProvider.getSessionId());
}
;
};
keepAliveStatusMessageTimer.schedule(timerJob, 5 * 1000, 5 * 1000);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("LocalService", "Received start id " + startId + ": " + intent);
doInBackground();
return START_STICKY;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
此服務工作完美,當我用我的應用程序或去在後臺, 但是當我從背景刷卡殺我的應用我收到以下錯誤
致命異常:定時器0 進程:com.me.cst,PID:18897 java.lang.NullPointerException:嘗試調用虛方法void com.me.interfaces.JsHandler.keepAliveStatusMessage(java.lang.String,java.lang.String,java。在com.me.service.KeepAliveStatusMessageService $ 1.run(KeepAliveStatusMessageService.java:67) 上的空對象引用 lang.String)」在java.util.Timer中$ TimerImpl.run(Timer.java:284)
我不知道爲什麼JsHandler殺死應用程序後變爲空。 請幫助我在殺死應用程序後調用該方法,因爲服務未被中止只有該值變爲空。 任何建議表示讚賞.. 請原諒我的英語...
EDIT1: JsHandler是下賤JsHandler.java類的。這個類用來調用從那裏網絡調用將被髮送的Java腳本方法。 以下是JsHandler類的簡報 JsHandler.java
public class JsHandler {
Activity activity;
WebView webView;
Handler handler = new Handler();
public JsHandler(Activity _contxt, WebView _webView, Handler handler) {
activity = _contxt;
webView = _webView;
this.handler = handler;
}
public void keepAliveStatusMessage(String ip, String username, String sessionId) {
final String webUrl = "javascript:keepAliveStatusMessage('" + ip + "','" + username + "','" + sessionId + "')";
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
webView.loadUrl(webUrl);
}
});
}
}
我創建JsHandler的靜態變量LoginActivity.java 我做了靜態變量,因爲我不能夠通過putExtra方法傳遞對象在啓動方法
public static JsHandler javaSHandler;
和分配值
javaSHandler = new JsHandler(this, loginWebView, new Handler());
在KeepAliveStatusMessage.java類中,我正在訪問該靜態變量。 來調用JsHandler類的keepAlive方法。
所以有辦法解決這個問題 我試過Singleton類,但是給我空 – MKY
@MKY:我不知道什麼'javaSHandler'是什麼,它做什麼,爲什麼它是一個單身人士,爲什麼你認爲它會存在。我甚至不知道這整個服務是什麼,因爲它似乎沒有做任何事情。所以,也許解決辦法是擺脫服務本身。除此之外,我不能真正幫助你,除非你編輯你的問題並詳細解釋,**詳細說明**,你試圖用這個代碼來完成什麼。 – CommonsWare
@MKY:肯定會擺脫服務。當你的進程終止時,**你的'WebView'不見了**,所以服務沒有任何事情可做。 – CommonsWare