ユーザーがサービスを閉じたときにサービスを常に実行または再起動し続ける方法を教えてもらえますか? メモリをクリアすると Facebook サービスが再起動するのを見てきました。ForegroundServices を作成したくありません。
30902 次
2 に答える
29
スティッキー サービスを作成する必要があります。詳しくはこちらをご覧ください。
これを行うには、onStartCommand で START_STICKY を返します。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("LocalService", "Received start id " + startId + ": " + intent);
// We want this service to continue running until it is explicitly
// stopped, so return sticky.
return START_STICKY;
}
application:persistentについてもお読みください。これは、「アプリケーションを常に実行し続ける必要があるかどうか」です。これはより厄介です - システムは、システム内の他のアプリに影響を与えるアプリを強制終了しないようにします。注意して使用する必要があります。
于 2012-08-18T09:41:31.190 に答える
8
これは、以前行ったアプリで使用したサービスからコピーしたものです。
UI を更新しないことが重要です。サービスにはユーザー インターフェイスがないためです。これはトーストにも当てはまります。
幸運を
public class nasserservice extends Service {
private static long UPDATE_INTERVAL = 1*5*1000; //default
private static Timer timer = new Timer();
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate(){
super.onCreate();
_startService();
}
private void _startService()
{
timer.scheduleAtFixedRate(
new TimerTask() {
public void run() {
doServiceWork();
}
}, 1000,UPDATE_INTERVAL);
Log.i(getClass().getSimpleName(), "FileScannerService Timer started....");
}
private void doServiceWork()
{
//do something wotever you want
//like reading file or getting data from network
try {
}
catch (Exception e) {
}
}
private void _shutdownService()
{
if (timer != null) timer.cancel();
Log.i(getClass().getSimpleName(), "Timer stopped...");
}
@Override
public void onDestroy()
{
super.onDestroy();
_shutdownService();
// if (MAIN_ACTIVITY != null) Log.d(getClass().getSimpleName(), "FileScannerService stopped");
}
}
于 2012-08-18T07:12:53.550 に答える