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);
}
}
}
网友评论