8

I am developing an application which is used as application locker, an app which is able to protect other installed apps by asking the user for a password on opening those apps, my app is here

The problem is that the application can be easily skipped by force close it from the android task manager, how can I overcome this?

Also what is the best way to check for a new application open, to make a service which check every one second for the app on the top of tasks or to fire alarm with alarm manager every second to make the check.

CopsOnRoad
  • 237,138
  • 77
  • 654
  • 440
Omar Hassan
  • 727
  • 1
  • 11
  • 24

3 Answers3

5

Updated :

Restart service after force stop

Answer : Sorry you can't restart it until the user manually launches application.

Assuming that your service is running as part of the process and if the user force-stops your process, you are prevented from ever running the service again until the user manually launches you.This is especially valid from 3.0 and above version ( check for yours). It also seems logical when you think that there is an app which keeps a service started all the time and is annoying the user in some way. So when the user orders a hit ( :) force-stops) on the app, it should not restart the service to continue bugging the user.

For instance, Imagine what would happen if you could create apps which just ate at your processor time by holding a wake lock, and you couldn't kill them. This would be horrible and a huge security disaster.

So, you will not be able to restart your service by any means until the user launches one of your activities.

Also you cannot disable the force-stop button AFAIK. You should take the viewpoint that nothing on the device is yours to control besides your app and (to a limited extent) the resources to which you're granted access.

Finnally, even the gtalk app will bend to your will if you desire to force stop. It will start only when you use Gtalk or other apps which use the gtalk service such as PUSH Gmail ( for phones where gtalk isnt a part of firmware).

Reference Link

Solution :

https://stackoverflow.com/a/11238779/1218762

Community
  • 1
  • 1
Ronak Mehta
  • 5,971
  • 5
  • 42
  • 69
  • but android kill my service on selecting force stop, but if you clicked stop the service will work again. – Omar Hassan Jun 10 '13 at 11:44
  • what if i am using AlarmManager to schedule an laram every one second and the user stopped the app, the aralm will stop also ? – Omar Hassan Jun 10 '13 at 12:07
  • The problem is in some chinese mobiles where even when swipe closed it force stops that app. And it wont function till you open it again. – Srihari Karanth Dec 11 '18 at 10:33
  • Hey Srihari, You probably talk about Vivo and Xiaomi. I will have some research on this devices and keep this answer updated. These devices were not exist when I answered. Sorry for that. – Ronak Mehta Dec 11 '18 at 10:37
  • What about the gmail widget app? When I force stop it and go back to the home screen it starts the service again. – Pedro Romano Barbosa Sep 03 '19 at 16:01
1

I solved this problem by scheduling AlarmManager, to run my service again:

    public void onDestroy() {
        AlarmManager alarmMgr = (AlarmManager)this.getSystemService(this.ALARM_SERVICE);
        Intent i = new Intent(this, MyService.class);
        PendingIntent pendingIntent = PendingIntent.getService(this, 0, i, 0);
        alarmMgr.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10, pendingIntent);
    }
Lubo
  • 19
  • 2
-1

Create your own Exception Handler & whenever app crashes start service ..

Your Exception Handler Class

*public class MyHandler implements UncaughtExceptionHandler {
    private Context m_context;


    public static void attach(Context context) {
        Thread.setDefaultUncaughtExceptionHandler(
            new MyHandler(context)
        );
    }

    ///////////////////////////////////////////// implementation

    private MyHandler(Context context) {
        m_context=context;
    }

    public void uncaughtException(Thread thread,Throwable exception) {
    /*  StringWriter stackTrace=new StringWriter();
        exception.printStackTrace(new PrintWriter(stackTrace));*/
        System.out.println("ERROR IS "+(exception));


        Intent intent=new Intent("com.sample.service.serviceClass");  
            m_context.startService(intent);

        // from RuntimeInit.crash()
        Process.killProcess(Process.myPid());
        System.exit(10);
    }
}*

Attach In Your Activity

public class MyActivity extends Activity{
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.grid_layout);
        MyHandler.attach(this);
}
}
MohsinSyd
  • 175
  • 2
  • 13
  • Is an exception thrown when the user force stops the service? – brianestey Jun 11 '13 at 07:52
  • @msn Does this work if I attach this a Service lets say, I attach this a Service and if some one stops the service, it will restart the service. I would have attach the code to the ondestroy() however I heard that forcibly stopping the app may not call onDestroy() – Saty Jul 25 '14 at 10:38