2016-09-06 9 views
-1

私は一定の時間ごとにサーバーで何らかのチェックを行う必要があるアプリを開発しています。チェックは、表示する通知があるかどうかを確認することで構成されます。その目標を達成するために、私はService、Alarm Manager、およびBroadcast Recieverを実装しました。これは私がこれまで使用しているコードです:アプリが破壊された後もサービスを継続してください

public class MainActivity { 
    ... 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ... 
     setRecurringAlarm(this); 
    } 

    /** 
    * 
    * @param context 
    */ 
    private void setRecurringAlarm(Context context) { 
     Calendar updateTime = Calendar.getInstance(); 

     Intent downloader = new Intent(context, MyStartServiceReceiver.class); 
     downloader.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, downloader, PendingIntent.FLAG_CANCEL_CURRENT); 

     AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, updateTime.getTimeInMillis(), 60000, pendingIntent); 
    } 

    ... 
} 

レシーバクラス

public class MyStartServiceReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    Intent dailyUpdater = new Intent(context, MyService.class); 
    context.startService(dailyUpdater); 
    Log.e("AlarmReceiver", "Called context.startService from AlarmReceiver.onReceive"); 
} 

}

Serviceクラス

public class MyService extends IntentService { 
    public MyService() { 
     super("MyServiceName"); 
    } 
    @Override 
    protected void onHandleIntent(Intent intent) { 
     Log.e("MyService", "Service running!"); 

     // TODO Do the hard work here 

     this.sendNotification(this); 
    } 

    private void sendNotification(Context context) { 
     // TODO Manage notifications here 
    } 
} 

たManifest.xml

<!--SERVICE AND BROADCAST RECEIVER--> 
    <service 
     android:name=".MyService" 
     android:exported="false"/> 
    <receiver 
     android:name=".MyStartServiceReceiver" 
     android:process=":remote"/> 

コードが正常に動作し、サービス内のタスクは、定期的にexcecutedされます。問題は、アプリケーションが強制終了されたときにサービスが破棄されることです。私は、ユーザーが通知を介して更新することができるように、ユーザーがアプリケーションを閉じている場合でも、タスクを実行できるサービスを生かしておく必要があります。あなたの時間をありがとう!

答えて

1

できません。アプリが強制的に閉鎖されている場合は、クラッシュしたことを意味します(この場合、サービスは正常に機能しなくなるため停止する必要があります)。またはユーザーが強制終了した場合は、ユーザーはサービスの実行を望んでいません。ユーザーがサービスを停止しても自動的にサービスを再開できるようにするには、基本的にマルウェアをOSに書き込むことです。

実際、Androidは正反対で(正しい)方法で実行されます。ユーザーが強制的にアプリを停止した場合、アプリが何も手で動かなくなるまで実行できません。

0

あなたはthisに行くことができます。これがあなたの問題を解決することを願っています。あなたが目を覚ましたままにしたい場合は、近くに強制されているアプリを再起動することは事実上不可能です。したがって、力の停止を無効にすると、問題が解決する可能性があります。

関連する問題