android重启APP
16lz
2021-01-23
一、启动另一个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、重启本APP
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. 开启一个Service,然后自己杀死APP的进程,最后在Service里通过包名来启动一个APP并销毁Service
/** * 此工具类用来重启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
<service android:name=".killSelfService" />
更多相关文章
- Android 获得当前进程PackageName
- 穿针引线,帮你回忆, 汇总:Android系统启动流程 & 应用程序'进程'启
- android 查看其他进程内存数据
- Android 消息机制 进程调度问题
- Android进程间通信(IPC)
- android笔记 AIDL 实现进程间通信
- Android AIDL 实现两个APP之间的跨进程通信实例
- Android kill app Process 结束进程代码
- 跨进程共享 SharedPreferences