gpt4 book ai didi

Android后台服务崩溃而它滑出

转载 作者:行者123 更新时间:2023-11-30 02:53:53 24 4
gpt4 key购买 nike

当我从任务管理器中删除我的应用程序时。0 个进程和 1 个服务剩余。应用程序一次又一次地崩溃我应该怎么做才能解决它?这是我的服务等级。我想再问一件事 OnStart() 方法和 OnStartCommand() 方法之间的区别?

package com.example.vaccinationsystem;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import android.annotation.SuppressLint;
import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.SystemClock;
import android.util.Log;
import android.widget.TabHost.OnTabChangeListener;

@SuppressLint("Override")
public class BackgroundServices extends Service {

String userId;
SoapObject request;
PropertyInfo p_userId;
SoapSerializationEnvelope envelope;
HttpTransportSE httpTransport;
SoapPrimitive response;
ArrayList<String> listRec;
String s;
int totalDifference;
int countNotification = 0;

private static final String METHOD_NAME = "Alerts";
private static final String NAMESPACE = "http://org.fyp.ws";
private static final String SOAP_ACTION = "http://org.fyp.ws/Alerts";
private static final String URL = StaticIP.ipAddress
+ "GeneralUserServices?wsdl";

@Override
public IBinder onBind(Intent arg0) {
return null;
}

// @Override
// public void onCreate() {
//
// Toast.makeText(this, "Congrats! MyService Created",
// Toast.LENGTH_LONG).show();
// // Log.d(TAG, "onCreate");
// }

@Override
public void onStart(Intent intent, int startId) {


userId = intent.getExtras().getString("user_Id");
listRec = new ArrayList<String>();
request = new SoapObject(NAMESPACE, METHOD_NAME);
p_userId = new PropertyInfo();
envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
httpTransport = new HttpTransportSE(URL);

p_userId.setName("userId");// Define the variable name in the web
p_userId.setValue(userId);// Define value for fname variable
p_userId.setType(String.class);// Define the type of the variable
request.addProperty(p_userId);// Pass properties to the variable

envelope.setOutputSoapObject(request);


try {

httpTransport.call(SOAP_ACTION, envelope);
response = (SoapPrimitive) envelope.getResponse();
// Toast.makeText(getApplicationContext(), response.toString(),
// Toast.LENGTH_LONG).show();

String[] row = response.toString().split("`");

for (int i = 0; i < row.length; i++) {

String[] record = row[i].split("~");
// totalDifference = 0;
Calendar c = Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");

String curDate = df.format(c.getTime()).toString();
String visitDate = record[1];

java.util.Date cD = df.parse(curDate);
java.util.Date vD = df.parse(visitDate);

Calendar cCurDate = Calendar.getInstance();
cCurDate.setTime(cD);
cCurDate.add(Calendar.DAY_OF_YEAR, 0);
java.util.Date newCurDate = cCurDate.getTime();

Calendar cNotificationStartVisitDate = Calendar.getInstance();
cNotificationStartVisitDate.setTime(vD);
cNotificationStartVisitDate.add(Calendar.DAY_OF_YEAR, -15);
java.util.Date notificationStartDate = cNotificationStartVisitDate
.getTime();

Calendar cOrignalVisitDate = Calendar.getInstance();
cOrignalVisitDate.setTime(vD);
cOrignalVisitDate.add(Calendar.DAY_OF_YEAR, 0);
java.util.Date newOriDateVisitDate = cOrignalVisitDate
.getTime();
totalDifference = 0;

if (notificationStartDate.before(newCurDate)) {

while (newOriDateVisitDate.after(newCurDate)) {
cOrignalVisitDate.add(Calendar.DAY_OF_YEAR, -1);
newOriDateVisitDate = cOrignalVisitDate.getTime();
totalDifference++;
s = "left";
}
while (newOriDateVisitDate.before(newCurDate)) {
cOrignalVisitDate.add(Calendar.DAY_OF_YEAR, +1);
newOriDateVisitDate = cOrignalVisitDate.getTime();
totalDifference++;
s = "ago";
}
countNotification++;
listRec.add(record[2] + " Vaccine due: " + String.valueOf(totalDifference)
+ " days " + s);

}

}

for (int j = 0; j < countNotification; j++) {

NotificationManager nm = (NotificationManager) getApplicationContext()
.getSystemService(getApplicationContext().NOTIFICATION_SERVICE);
Notification note = new Notification(R.drawable.nav_down,
"Vaccination ALerts!", System.currentTimeMillis());
Intent inNotification = new Intent(this,GenUserFunction.class);
inNotification.putExtra("user_id", userId);
PendingIntent i = PendingIntent.getActivity(getBaseContext(), 0,inNotification, 0);
note.setLatestEventInfo(getApplicationContext(), "Vaccine Due",
listRec.get(j), i);
nm.notify(j, note);


}



// Toast.makeText(getApplicationContext(),
// String.valueOf(listRec.size()), Toast.LENGTH_SHORT).show();

} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());

}




// Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();

// Note: You can start a new thread and use it for long background
// processing from here.
}





@Override
public void onDestroy() {


enter code here
super.onDestroy();

// Toast.makeText(this, "MyService Stopped", Toast.LENGTH_LONG).show();
// Log.d(TAG, "onDestroy");
}
}

最佳答案

  1. void onStart(Intent intent, int startId) 已弃用,您需要改用 int onStartCommand(Intent intent, int flags, int startId)
  2. onStart(...)onStartCommand(...) 调用以实现向后兼容性,并且 onStartCommand(... ) 返回 START_STICKY 值。所以,杀完之后,你的服务会被系统重启。当服务被系统重新启动时,onStart(...) 方法可以用一个 null intent 对象调用,并且 intent.getExtras().getString("user_Id") 抛出NullPointerException,服务会崩溃,由系统重启...

作为结论:在使用它之前,您需要检查 intent 对象是否为 null

关于Android后台服务崩溃而它滑出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23654119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com