Dragon Creature
Dragon Creature

Reputation: 1995

Close app after some time in background

I'm looking for a way to close an android app after some time while the app has not been in focus. For example if the user open up an other app instead, the app should exit after 5 mins. I have tried using runnable and creating a thread. But those method don't seems to work while the app is in the background (maybe they are pause I'm not sure). So how do I close the app when it is not in focus?

For those who are wonder the reason I want to do this is that the app contains some sensitives data about the user so I want to be sure it is all cleared when they aren't using it.

Upvotes: 1

Views: 7826

Answers (4)

Kevin Krumwiede
Kevin Krumwiede

Reputation: 10288

The fundamental problem with what you're trying to do is that your Activity may not exist in memory at all when it's "running" in the background. The Android framework may have destroyed the activity instance and even the process it was running in. All that exists may be the persistent state you saved in onSaveInstanceState(...) and a screenshot for the recent apps list. There may be nothing for you to get a reference to and kill.

Frank Brenyah's suggestion to call finish() in onPause() will prevent your activity from running in the background at all, but this is the closest you can get to what you want. You probably only want to do this when isChangingConfigurations() is false. But even when all your app's activities are finished, Android may keep the process and Application instance around to avoid recreating them later. So you may also want to use Bhush_techidiot's suggestion of killing the process. Do this in onPause() because the activity may be destroyed without a call to onDestroy().

Upvotes: 0

Techidiot
Techidiot

Reputation: 1947

Get the process ID of your application, and kill that process onDestroy() method

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

   int id= android.os.Process.myPid();

   android.os.Process.killProcess(id);
}

Refer- how to close/stop running application on background android

Edit- Use this with AlarmManager

Upvotes: 0

vlp
vlp

Reputation: 8106

Something like this might work:

A field inside activity class:

private Thread t = null;

Inside onResume():

if(t!=null) {
    if(t.isAlive()) {
        t.interrupt();
        t.join();
    }
    t=null;
}

Inside onPause():

t = new Thread() {
    public void run() {
            try {
                sleep(5*60*1000);
                // Wipe your valuable data here
                System.exit(0);
            } catch (InterruptedException e) {
                return;
            }
    }.start();
}

Upvotes: 2

Frank B.
Frank B.

Reputation: 204

I recommend calling finish() in the onPause() or onStop() callbacks. A TimerTask will not survive onPause() and a Service does not appear, on face value, to give you options. Maybe you can start a service, sleep the thread the service runs on, then kill the processes your app has after the sleep timer expires.

Alternatively, you can just implement some security libraries to help secure the data from other apps.

Here is the Google Services link.

Upvotes: 0

Related Questions