我在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