2014-02-26 63 views
0

我正在研究一项服务,该服务将检查应用程序是否在特定时间内处于闲置状态(在后台),如果应用程序超过了指定时间,则会终止该应用程序。此外,如果用户已恢复活动,则会重置计时器计时器会在闲置一段时间后杀死android应用程序吗?

问题是,如果我的应用程序中的活动很少,我该如何实现它?我发现了一些类似的代码,但如何调整它以适合我的情况?谢谢。

示例代码:

超时类及其服务

public class Timeout { 
    private static final int REQUEST_ID = 0; 
    private static final long DEFAULT_TIMEOUT = 5 * 60 * 1000; // 5 minutes 

    private static PendingIntent buildIntent(Context ctx) { 
     Intent intent = new Intent(Intents.TIMEOUT); 
     PendingIntent sender = PendingIntent.getBroadcast(ctx, REQUEST_ID, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

     return sender; 
    } 

    public static void start(Context ctx) { 
     ctx.startService(new Intent(ctx, TimeoutService.class)); 

     long triggerTime = System.currentTimeMillis() + DEFAULT_TIMEOUT; 

     AlarmManager am = (AlarmManager) ctx.getSystemService(Context.ALARM_SERVICE); 

     am.set(AlarmManager.RTC, triggerTime, buildIntent(ctx)); 
    } 

    public static void cancel(Context ctx) { 
     AlarmManager am = (AlarmManager) ctx.getSystemService(Context.ALARM_SERVICE); 

     am.cancel(buildIntent(ctx)); 

     ctx.startService(new Intent(ctx, TimeoutService.class)); 

    } 

} 



public class TimeoutService extends Service { 
    private BroadcastReceiver mIntentReceiver; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     mIntentReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       String action = intent.getAction(); 

       if (action.equals(Intents.TIMEOUT)) { 
        timeout(context); 
       } 
      } 
     }; 

     IntentFilter filter = new IntentFilter(); 
     filter.addAction(Intents.TIMEOUT); 
     registerReceiver(mIntentReceiver, filter); 

    } 

    private void timeout(Context context) { 
     App.setShutdown(); 

     NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     nm.cancelAll(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 

     unregisterReceiver(mIntentReceiver); 
    } 

    public class TimeoutBinder extends Binder { 
     public TimeoutService getService() { 
      return TimeoutService.this; 
     } 
    } 

    private final IBinder mBinder = new TimeoutBinder(); 

    @Override 
    public IBinder onBind(Intent intent) { 
     return mBinder; 
    } 

} 

杀应用

android.os.Process.killProcess(android.os.Process.myPid()); 
+0

只是好奇:为什么你认为你需要管理你的应用程序的背景状态? Android会自动... – 2Dee

+0

似乎应用程序永远不会被杀死,如果它处于空闲状态 – user782104

+0

然后系统可能不需要内存...为什么你想杀死应用程序,而不是利用系统的能力当用户切换到它时恢复您的应用程序的状态? – 2Dee

回答

1

当你带回你可以使用handler.postDelayed(可运行,时间)和您活动你可以调用handler.removeCallbacks(runnable);取消postDelayed

相关问题