Androidアプリを再起動

6566 ワード

一、別のAPPを起動する
コードは比較的簡単で、直接貼り付けます:
     try {
            PackageManager packageManager = getActivity().getPackageManager();
            Intent intent=new Intent();
            intent = packageManager.getLaunchIntentForPackage("com.maiji.textviewchangedemo"); //           app   
            startActivity(intent);
        } catch (Exception e) {
            Log.e("          ",e.getMessage());   //   ,      app    ,        
        }

2、本アプリを再起動する
a.FLAGを使用するACTIVITY_CLEAR_TOP :
 Intent intent = getBaseContext().getPackageManager()
                        .getLaunchIntentForPackage(getBaseContext().getPackageName());
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);

b.AlarmManagerの使用:
        Intent intent = getBaseContext().getPackageManager()
                .getLaunchIntentForPackage(getBaseContext().getPackageName());
        PendingIntent restartIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_ONE_SHOT);
        AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, restartIntent); // 1       
        System.exit(0);

c.サービスを起動し、自分でAPPのプロセスを殺し、最後にサービスでパッケージ名でAPPを起動し、サービスを破棄する
/**
 *         APP,       ,      。
 * Created by 13itch on 2016/8/5.
 */
public class RestartAPPTool {

    /**
     *     APP
     * @param context
     * @param Delayed       
     */
    public static void restartAPP(Context context,long Delayed){

        /**        ,     APP*/
        Intent intent1=new Intent(context,killSelfService.class);
        intent1.putExtra("PackageName",context.getPackageName());
        intent1.putExtra("Delayed",Delayed);
        context.startService(intent1);

        /**      **/
        android.os.Process.killProcess(android.os.Process.myPid());
    }
    /***    APP*/
    public static void restartAPP(Context context){
        restartAPP(context,2000);
    }
}
/***
 *        APP  ,            APP。        
 */
public class killSelfService extends Service {
    /**           */
    private static  long stopDelayed=2000;
    private Handler handler;
    private String PackageName;
    public killSelfService() {
        handler=new Handler();
    }

    @Override
    public int onStartCommand(final Intent intent, int flags, int startId) {
        stopDelayed=intent.getLongExtra("Delayed",2000);
        PackageName=intent.getStringExtra("PackageName");
        handler.postDelayed(()->{
                Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage(PackageName);
                startActivity(LaunchIntent);
                killSelfService.this.stopSelf();
        },stopDelayed);
        return super.onStartCommand(intent, flags, startId);
    }


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

}

最後に忘れないでAndroidManifestでxmlファイルにサービスを登録する
 <service
      android:name=".killSelfService"
 />