Android多进程重启app

本文介绍了如何在Android中实现跨进程重启应用的需求,主要解决语言切换后资源未更新的问题。通过创建子进程服务,结合Application的资源获取方法,当需要重启时,杀死当前进程并利用服务完成重启操作。
摘要由CSDN通过智能技术生成

跨进程:Client进程只不过是持有了Server端的代理;代理对象协助驱动完成了跨进程通信。

对于一些需求,比如切换语言重启应用,如果项目中很多地方有通过Application.getResource().getString(int stringRes)

在部分手机可能存在语言没有切换的问题,比较简单的能解决这个问题的方式是,杀死当前进程,重新启动app。

具体实现:

1、子进程服务

/**
 * 跨进程重启,避免用Application获取的文案,切换语言后文案未更新问题
 */
public class RestartService extends Service {
    public static final int MSG_CONNECTED = 1;
    public static final int MSG_KILL_APP = 2;
    public static final int MSG_RESTART_APP = 3;
    private String mPackageName;//要重启的app的包名
    @Override
    public IBinder onBind(Intent intent) {
        if (intent != null) {
            mPackageName = intent.getStringExtra(AppRestartControl.PACKAGE_BUNDLE_KEY);
        }
        Messenger restartMessenger = new Messenger(new ServerMsgHandler(this, mPackageName));
        return restartMessenger.getBinder();
    }

    private static class ServerMsgHandler extends Handler {
        private Context mContext;
        private String mPackageName;
        public ServerMsgHandler(Context context, String packageName) {
            mContext = context;
            mPackageName = packageName;
        }
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case MSG_CONNECTED://收到app进程发来的消息,binder连接成功
                    try {
                        msg.re
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值