0

Androidデバイスの起動後に実行されるサービスがあります。これにより、毎日2つの通知が実行されます。しかし、問題があります。サービスがクラッシュするか、自動的に再起動するようです。また、指定された時間に通知が実行されません。どうすればこれを修正できますか?いつかトーストService CreatedService Started。ありがとう!

コード:

public class UnUsedService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @Override
    public void onCreate() {
        super.onCreate();
        Toast.makeText(this, "Service Created", Toast.LENGTH_LONG).show();
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
    }

    private PendingIntent pendingIntent;

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

        super.onStart(intent, startId);

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

        Calendar cal1 = Calendar.getInstance();
        cal1.set(Calendar.HOUR_OF_DAY, 05); //midday
        cal1.set(Calendar.MINUTE, 45);
        cal1.set(Calendar.SECOND, 00);

        Calendar cal2 = Calendar.getInstance();
        cal2.set(Calendar.HOUR_OF_DAY, 17);//8pm for example
        cal2.set(Calendar.MINUTE, 30);
        cal2.set(Calendar.SECOND, 00);

        AlarmManager am = (AlarmManager)getApplicationContext().getSystemService  (Context.ALARM_SERVICE);
        Intent intent2 = new Intent(getApplicationContext(), AlarmReceiver.class);
        PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 0, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
        am.setRepeating(AlarmManager.RTC_WAKEUP, cal1.getTimeInMillis(),cal2.getTimeInMillis(), pi);
    }
};
4

1 に答える 1

1

通知を特定の時間に実行する必要がある場合は、AlarmManagerを使用して通知をスケジュールする必要があります。これはAndroidによって保持されるため、サービスは自由に終了でき、アラームは必要に応じてサービスを再起動します。

現在、サービスを24時間年中無休で実行させているようです。これは、1日に2回何かを実行できるようにするためです。これは悪いAndroid市民です!代わりに使用するAlarmManagerと、問題が修正され、リソースの浪費を防ぐことができます。

于 2012-12-15T12:00:02.867 に答える