バックグラウンドでサービスを継続的に実行します。たとえば、アプリを閉じても20秒に1回トーストメッセージを表示するサービスを開始する必要があります。
public class AppService extends IntentService {
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
public AppService() {
super("AppService");
}
@Override
protected void onHandleIntent(Intent workIntent) {
Toast.makeText(getApplicationContext(), "hai", Toast.LENGTH_SHORT).show();
SystemClock.sleep(20000);
}
}
以下のコードは私のために働きます...
public class AppService extends Service {
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
Toast.makeText(this, " MyService Created ", Toast.LENGTH_LONG).show();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, " MyService Started", Toast.LENGTH_LONG).show();
return START_STICKY;
}
}
サービスを宣言するマニフェストに、次を追加します。
Android:process=":processname"
これにより、サービスを別のプロセスで実行できるため、アプリでサービスが強制終了されることはありません。
次に、フォアグラウンドを使用するかどうかを選択できます。永続的な通知が表示されますが、サービスが強制終了される可能性は低くなります。
さらに、継続的に実行されるサービスを作成する場合は、Service
、[〜#〜] not [〜#〜]IntentService
を使用します。 IntentServiceは、アクションの実行が終了すると停止します。
このコードは私のために働きます。
public class ServiceClass extends Service {
public static final int notify = 300000; //interval between two services(Here Service run every 5 Minute)
private Handler mHandler = new Handler(); //run on another Thread to avoid crash
private Timer mTimer = null; //timer handling
@Override
public IBinder onBind(Intent intent) {
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onCreate() {
if (mTimer != null) // Cancel if already existed
mTimer.cancel();
else
mTimer = new Timer(); //recreate new
mTimer.scheduleAtFixedRate(new TimeDisplay(), 0, notify); //Schedule task
}
@Override
public void onDestroy() {
super.onDestroy();
mTimer.cancel(); //For Cancel Timer
Log.d("service is ","Destroyed");
}
//class TimeDisplay for handling task
class TimeDisplay extends TimerTask {
@Override
public void run() {
// run on another thread
mHandler.post(new Runnable() {
@Override
public void run() {
Log.d("service is ","running");
}
});
}
}
}