美文网首页问题研究
android 记录一些细小问题

android 记录一些细小问题

作者: 一个冬季 | 来源:发表于2019-12-25 16:11 被阅读0次

    1、dialog 异常信息,is your activity running?

    2、ViewGroup动态添加childView,ViewGroup.getWidth() = 0

    3、A APP 打开 B APP,如果APP已经打开,直接切换到B APP

    描述问题/解决问题

    1、dialog 异常信息,is your activity running?

    问题描述
    第一次进入APP调用showLoading(),没有出现异常信息,当我退出APP,再次进入APP并调用showLoading(),就会出现is your activity running的异常信息,明明我的activity存在 && dialog!=null

       public void showLoading() {
            if (mLoadingSmallDialog==null){
                mLoadingSmallDialog = new LoadingSmallDialog(mActivity);
            }
            if (mLoadingSmallDialog.isShowing()){
                mLoadingSmallDialog.dismiss();
            }
            if (mActivity!=null && !mActivity.isFinishing())
               mLoadingSmallDialog.show();
        }
    

    解决问题

        @Override
        public void onDestroyView() {
            super.onDestroyView();
            if (mLoadingSmallDialog!=null){
                if (mLoadingSmallDialog.isShowing()){
                    mLoadingSmallDialog.dismiss();
                }
                mLoadingSmallDialog = null;
            }
        }
    

    因为我们在退出APP的时候,可能系统并不会马上的去回收LoadingSmallDialog,所以我们的mActivity一直是上一个我们退出APP时候的mActivity,我们需要在销毁的时候,将dialog置位null。

    2、ViewGroup动态添加childView,ViewGroup.getWidth() = 0

    问题描述
    进入APP,请求服务器,拿到数据List循环遍历chidView,动态添加到LinearLayout,在动态添加到LinearLayout之前,需要获取LinearLayout的宽度,结果发现是0

    解决问题

    llActivityFloor.post(new Runnable() {
          int parentWidth = llActivityFloor.getWidth();
        //输入你的代码
    })
    
    3、A APP 打开 B APP,如果APP已经打开,直接切换到B APP
    /**
         * @param pkgName 需要知道已安装的pakName
         *                return true表示已经安装了
         * @date :2020/1/6 0006
         * @author : gaoxiaoxiong
         * @description: 判断某个APP是否安装
         **/
        public static boolean checkAppInstalled(Context context, String pkgName) {
            boolean b = false;
            if (pkgName == null || pkgName.isEmpty()) {
                return b;
            }
            final PackageManager packageManager = context.getPackageManager();
            // 获取所有已安装程序的包信息
            List<PackageInfo> info = packageManager.getInstalledPackages(0);
            if (info == null || info.isEmpty())
                return b;
            for (int i = 0; i < info.size(); i++) {
                if (pkgName.equals(info.get(i).packageName)) {
                    b = true;
                    break;
                }
            }
            return b;
        }
    
        /**
         * @param pkgName 包名
         * @param htmlUrl 如果APP没有安装,就要跳转到一个HTML页面,并传递这个页面过去
         * @date :2020/1/6 0006
         * @author : gaoxiaoxiong
         * @description:打开其他APP
         **/
        public static void openOtherAPP(Context context, String pkgName, Bundle bundle, String htmlUrl) {
            if (checkAppInstalled(context, pkgName)) {
                // 获取包管理器
                PackageManager manager = context.getPackageManager();
                // 指定入口,启动类型,包名
                Intent intent = new Intent(Intent.ACTION_MAIN);//入口Main
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
                intent.addCategory(Intent.CATEGORY_LAUNCHER);// 启动LAUNCHER,跟MainActivity里面的配置类似
                intent.setPackage(pkgName);//包名
                if (bundle != null) {
                    intent.putExtras(bundle);
                }
                //查询要启动的Activity
                List<ResolveInfo> apps = manager.queryIntentActivities(intent, 0);
                if (apps.size() > 0) {//如果包名存在
                    ResolveInfo ri = apps.get(0);
                    //获取包名
                    String packageName = ri.activityInfo.packageName;
                    //获取app启动类型
                    String className = ri.activityInfo.name;
                    //组装包名和类名
                    ComponentName cn = new ComponentName(packageName, className);
                    //设置给Intent
                    intent.setComponent(cn);
                    //根据包名类型打开Activity
                    context.startActivity(intent);
                }
            } else {//APP没有安装
                if (!StringUtils.getInstance().isEmpty(htmlUrl)) {
                    Intent intent = new Intent(context, SPCommonWebActivity.class);
                    intent.putExtra(KEY_WEB_URL, returnHaveHttpoHttps(htmlUrl));
                    context.startActivity(intent);
                }
            }
        }
    

    相关文章

      网友评论

        本文标题:android 记录一些细小问题

        本文链接:https://www.haomeiwen.com/subject/kfbcoctx.html