Android - 多项服务未按预期运行

标签 android service

我有这个服务:

public class AAAService extends Service {

private Intent requestService;
private Intent calendarService;
private SharedPreferences servicePreferences;

private static final String REQUEST_DELAY = "request_interval";
private static final int REQUEST_DELAY_DEFAULT = 900000;
private static final String SERVICE = "service";
private static final String SOUND = "sound";
private static final String VIBRATE = "vibrate";

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate(){
    super.onCreate();
    Log.i("daim", "AAAService has started ...");
    requestService = new Intent(this, RequestService.class);
    calendarService = new Intent(this, CalendarService.class);
    servicePreferences = getSharedPreferences(SERVICE, MODE_PRIVATE);
    long delay = Long.valueOf(servicePreferences.getInt(REQUEST_DELAY, REQUEST_DELAY_DEFAULT));
    if(delay > 0){
        startRequestService();
    }
    startCalendarService();
}

@Override
public void onDestroy(){
    super.onDestroy();
    Log.i("daim", "AAAService has stopped ...");
    stopRequestService();
    stopCalendarService();
}

public void startRequestService(){
    startService(requestService);
}

public void stopRequestService(){
    stopService(requestService);
}

public void startCalendarService(){
    startService(calendarService);
}

public void stopCalendarService(){
    stopService(calendarService);
}

还有这两项服务:

public class RequestService extends AAAService
public class CalendarService extends AAAService

这两个都有 onCreate 和 onDestroy 方法,以启动和停止服务。 我在这里面临的问题是,当我从 Activity 启动我的 AAAService 时,它​​启动了,是的,它启动了其他两个服务,但在那之后它就停止了(onDestroy 方法),我不知道为什么! 这是我在 Activity 中所做的:

Intent service = new Intent(this, AAAService.class);
startService(service);

感谢任何帮助! 谢谢。

我的另外两项服务:

public class CalendarService extends AAAService{

private CalendarApi calendarApi;

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

@Override 
public void onCreate() {
    super.onCreate();
    Log.i("daim", "CalendarService has started ...");
    calendarApi = AAALifestyleApplication.calendarApi;
    startService(); 
}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.e("daim", "CalendarService has stopped ...");    
}

public void startService(){
    Log.d("daim", "UPDATING EVENTS FROM CALENDAR SERVICE!!!");
    ArrayList<Long> dates = new ArrayList<Long>();
    dates.add(0L);
    dates.add(System.currentTimeMillis() * 2);
    calendarApi.getEventsFromDrupal(dates, this, null);
    stopSelf();
}

public class RequestService extends AAAService implements RequestListener{

private Timer timer;
private CommonApi commonApi;
private NotificationManager nManager;
private Notification notification;
private PendingIntent pIntent;
private Intent intent;
private Context context;
private SharedPreferences sharedPref;
private long delay;
private boolean sound, vibrate;

private static final int INTERVAL_DEFAULT = 900000;
private static final String SERVICE_NAME = "service";
private static final String INTERVAL_KEY = "request_interval";
private static final String SOUND = "sound";
private static final String VIBRATE = "vibrate";

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override 
public void onCreate() {
    super.onCreate();
    Log.i("daim", "RequestService has started ...");
    sharedPref = getSharedPreferences(SERVICE_NAME, MODE_PRIVATE);
    startService();
}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.e("daim", "RequestService has stopped ...");
    if(timer != null){
        timer.cancel();
    }
}

public void startService(){
    Log.d("daim", "UPDATING REQUESTS FROM REQUEST SERVICE!!!");
    int intervalInteger = sharedPref.getInt(INTERVAL_KEY, INTERVAL_DEFAULT);
    delay = Long.valueOf(intervalInteger);
    sound = sharedPref.getBoolean(SOUND, true);
    vibrate = sharedPref.getBoolean(VIBRATE, true);
    Log.d("daim", "sound: " + sound);
    Log.d("daim", "vibrate: " + vibrate);
    Log.d("daim", "delay: " + delay);
    commonApi = AAALifestyleApplication.commonApi;
    timer = new Timer();
    if(delay > 0){
        timer.scheduleAtFixedRate(new TimerTask() {     
            @Override
            public void run() {
                if(commonApi.isLoggedIn()){
                    commonApi.getRequests(RequestService.this, false);
                }       
            }
        }, 0, delay);
    }
}

@Override
public void onRequestResult(ArrayList<Request> requests) {
    for(Request r : requests){
        if(!commonApi.hasRequest(r)){
            sendNotification();
        }
    }
}

@Override
public void onAuthenticationError() {
    // TODO Auto-generated method stub

}

@Override
public void onConnectionError() {
    // TODO Auto-generated method stub

}

private void sendNotification(){
    context = getApplicationContext();
    nManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    notification = new Notification(R.drawable.icon, "You received new requests", System.currentTimeMillis());
    intent = new Intent(getBaseContext(), RequestsActivity.class);
    pIntent = PendingIntent.getActivity(getBaseContext(), 0, intent, android.content.Intent.FLAG_ACTIVITY_NEW_TASK);
    notification.setLatestEventInfo(context, "Request notification", "Click here to see your requests", pIntent);
    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    if(vibrate){
        notification.defaults |= Notification.DEFAULT_VIBRATE;
    }
    if(sound){
        notification.defaults |= Notification.DEFAULT_SOUND;
    }
    nManager.notify(0, notification);
}

最佳答案

在我的 CalendarService 中,我有方法 stopSelf();我以为它自己停止了,但也停止了 AAAService,这也会停止 RequestService。问题解决了!

关于Android - 多项服务未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8150430/

相关文章:

service - Angular 服务应该有状态吗?

android - 如何在android模拟器上模拟网络延迟?

service - 在Windows Server 2008上将Tomcat 7作为服务安装

android - 手机锁定时收听音量按钮android

android - native 应用程序在 Android L 上崩溃

android - 倒数计时器在后台更新用户界面

Android 前台服务通知替换

android - 3.2 sdk平台安装问题。 "Done. Nothing was installed"

android - 如何将数据从另一个 fragment 开始的 fragment 传输到 Activity

用于嵌入式触摸屏应用的 Android 与 Linux