2016-02-26 3 views
1

У меня есть следующий таймер в моем приложении:Keep работает таймер после убийства приложения

public class MainScreen extends ApplicationActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_screen); 

     Timer timer = new Timer(); 
     timer.scheduleAtFixedRate(new ScheduleSomething(), 1000, 1000); 
    } 

    public static class ScheduleSomething extends TimerTask { 
     @Override 
     public void run() { 
      System.out.println("This is a test!"); 
     } 
    } 
} 

Каждый второй сообщение «! Это тест» , но когда я закрываю приложение, он также останавливает таймер. Есть ли способ сохранить этот таймер при закрытии приложения?

Я попытался:

public void onStop(Bundle savedInstanceState) { 
    super.onStop(savedInstanceState); 

    Timer timer = new Timer(); 
    timer.scheduleAtFixedRate(new ScheduleSomething(), 1000, 1000); 
} 

public void onDestroy(Bundle savedInstanceState) { 
    super.onDestroy(savedInstanceState); 

    Timer timer = new Timer(); 
    timer.scheduleAtFixedRate(new ScheduleSomething(), 1000, 1000); 
} 

Но это не работает ...

+0

Используйте услугу. Вы не должны делать это в действии –

+0

Никогда не пользовался услугой, извините. Если я использую службу, могу ли я по-прежнему вызывать метод или классы из приложения? – Ravers

+0

Перед отправкой в ​​stackoverflow, пожалуйста, отправьте сообщение google. http://developer.android.com/guide/components/services.html –

ответ

1

Используйте вещательный приемник, чтобы запустить таймер после убийства приложению каждую минуту:

public class TimerReceiverSyncInterval extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     scheduleAlarms(context); 
     context.startService(new Intent(context, NotificationServiceSyncInterval.class)); 
     Log.d("TAG", "Sync OnReceive"); 
    } 

    public static void scheduleAlarms(Context paramContext) { 
     Calendar calendar = Calendar.getInstance(); 
     AlarmManager localAlarmManager = (AlarmManager) paramContext.getSystemService(Context.ALARM_SERVICE); 
     PendingIntent localPendingIntent = PendingIntent.getService(paramContext, 0, 
      new Intent(paramContext, NotificationServiceSyncInterval.class), PendingIntent.FLAG_UPDATE_CURRENT); 

     localAlarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 
       (1 * 60000), localPendingIntent); 
    } 
} 

И в классе ниже сделайте все, что захотите, в методе onHandleIntent, который вызывается каждую минуту из класса TimerReceiverSyncInterval:

public class NotificationServiceSyncInterval extends IntentService { 

    public NotificationServiceSyncInterval() { 
     super("Tracker"); 
    } 

    public NotificationServiceSyncInterval(String paramString) { 
     super(paramString); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     //ToDo: put what you want to do here 
     Log.d("TAG", "Handler call"); 
    } 
} 

сделать запись в файле манифеста:

<receiver 
    android:name="com.yourpackage.TimerReceiverSyncInterval" 
    android:enabled="true" > 
    <intent-filter android:priority="999" > 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     <action android:name="android.intent.action.QUICKBOOT_POWERON" /> 
    </intent-filter> 
</receiver> 

<service android:name="com.yourpackage.NotificationServiceSyncInterval" /> 

И, наконец, зарегистрировать приемник вещания от MainActivity вроде этого:

TimerReceiverSyncInterval.scheduleAlarms(this); 
Смежные вопросы