主页是加载了高德地图的控件,然后菜单是用一个dialog显示的,通过这个dialog打开其他的页面,之后就返回不了,我确认当前的activity是已经关闭了,并且也已经返回了地图主页,但是页面显示的仍然是通过dialog打开的页面,但是卡住了,安卓6版本以上没有这个问题,但是6以下就不可以了,求高手!!!!

解决方案 »

  1.   

    抓个log看看?
      

  2.   

    没有任何错误,当前的activity就是卡在那里的,我确认已经关闭了,并且主页的onResume()方法已经触发,如果你按home键返回了手机主页再次重新点开应用,那个卡住的activity页面就没了,app又恢复正常了
      

  3.   

    没有任何错误,当前的activity就是卡在那里的,我确认已经关闭了,并且主页的onResume()方法已经触发,如果你按home键返回了手机主页再次重新点开应用,那个卡住的activity页面就没了,app又恢复正常了
      

  4.   

    在应用主页有个dialog来打开其他页面,如果在打开其他页面之前把这个dialog dismiss()掉,页面是可以正常返回的,如果有这个dialog就会卡住,所以我在打开页面之前把他给dismiss掉,但是我后来又在在onResume方法里又让他出来,一样是卡住了
      

  5.   

    你跳转Activity用的是dialog的context吗,如果是的话加上newTastk标签或者直接使用首页的Activity跳转
      

  6.   

    定义一个UncaughtException处理类,当程序发生Uncaught异常的时候,由该类来接管程序,并记录发送错误报告多好public class CrashHandler implements UncaughtExceptionHandler {  
          
        public static final String TAG = "CrashHandler";  
          
        //系统默认的UncaughtException处理类   
        private Thread.UncaughtExceptionHandler mDefaultHandler;  
        //CrashHandler实例  
        private static CrashHandler INSTANCE = new CrashHandler();  
        //程序的Context对象  
        private Context mContext;  
        //用来存储设备信息和异常信息  
        private Map<String, String> infos = new HashMap<String, String>();  
      
        //用于格式化日期,作为日志文件名的一部分  
        private DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");  
      
        /** 保证只有一个CrashHandler实例 */  
        private CrashHandler() {  
        }  
      
        /** 获取CrashHandler实例 ,单例模式 */  
        public static CrashHandler getInstance() {  
            return INSTANCE;  
        }  
      
        /** 
         * 初始化 
         *  
         * @param context 
         */  
        public void init(Context context) {  
            mContext = context;  
            //获取系统默认的UncaughtException处理器  
            mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();  
            //设置该CrashHandler为程序的默认处理器  
            Thread.setDefaultUncaughtExceptionHandler(this);  
        }  
      
        /** 
         * 当UncaughtException发生时会转入该函数来处理 
         */  
        @Override  
        public void uncaughtException(Thread thread, Throwable ex) {  
            if (!handleException(ex) && mDefaultHandler != null) {  
                //如果用户没有处理则让系统默认的异常处理器来处理  
                mDefaultHandler.uncaughtException(thread, ex);  
            } else {  
                try {  
                    Thread.sleep(3000);  
                } catch (InterruptedException e) {  
                    Log.e(TAG, "error : ", e);  
                }  
                //退出程序  
                android.os.Process.killProcess(android.os.Process.myPid());  
                System.exit(1);  
            }  
        }  
      
        /** 
         * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. 
         *  
         * @param ex 
         * @return true:如果处理了该异常信息;否则返回false. 
         */  
        private boolean handleException(Throwable ex) {  
            if (ex == null) {  
                return false;  
            }  
            //使用Toast来显示异常信息  
            new Thread() {  
                @Override  
                public void run() {  
                    Looper.prepare();  
                    Toast.makeText(mContext, "很抱歉,程序出现异常,即将退出.", Toast.LENGTH_LONG).show();  
                    Looper.loop();  
                }  
            }.start();  
            //收集设备参数信息   
            collectDeviceInfo(mContext);  
            //保存日志文件   
            saveCrashInfo2File(ex);
            android.os.Process.killProcess(android.os.Process.myPid());
            return true;
        }  
          
        /** 
         * 收集设备参数信息 
         * @param ctx 
         */  
        public void collectDeviceInfo(Context ctx) {  
            try {  
                PackageManager pm = ctx.getPackageManager();  
                PackageInfo pi = pm.getPackageInfo(ctx.getPackageName(), PackageManager.GET_ACTIVITIES);  
                if (pi != null) {  
                    String versionName = pi.versionName == null ? "null" : pi.versionName;  
                    String versionCode = pi.versionCode + "";  
                    infos.put("versionName", versionName);  
                    infos.put("versionCode", versionCode);  
                }  
            } catch (NameNotFoundException e) {  
                Log.e(TAG, "an error occured when collect package info", e);  
            }  
            Field[] fields = Build.class.getDeclaredFields();  
            for (Field field : fields) {  
                try {  
                    field.setAccessible(true);  
                    infos.put(field.getName(), field.get(null).toString());  
                    Log.d(TAG, field.getName() + " : " + field.get(null));  
                } catch (Exception e) {  
                    Log.e(TAG, "an error occured when collect crash info", e);  
                }  
            }  
        }  
      
        /** 
         * 保存错误信息到文件中 
         *  
         * @param ex 
         * @return  返回文件名称,便于将文件传送到服务器 
         */  
        private String saveCrashInfo2File(Throwable ex) {  
              
            StringBuffer sb = new StringBuffer();  
            for (Map.Entry<String, String> entry : infos.entrySet()) {  
                String key = entry.getKey();  
                String value = entry.getValue();  
                sb.append(key + "=" + value + "\n");  
            }  
              
            Writer writer = new StringWriter();  
            PrintWriter printWriter = new PrintWriter(writer);  
            ex.printStackTrace(printWriter);  
            Throwable cause = ex.getCause();  
            while (cause != null) {  
                cause.printStackTrace(printWriter);  
                cause = cause.getCause();  
            }  
            printWriter.close();  
            String result = writer.toString();  
            sb.append(result);  
            try {  
                long timestamp = System.currentTimeMillis();  
                String time = formatter.format(new Date());  
                String fileName = "crash-" + time + "-" + timestamp + ".log";  
                if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {  
                    String path = "/sdcard/crash/";  
                    File dir = new File(path);  
                    if (!dir.exists()) {  
                        dir.mkdirs();  
                    }  
                    FileOutputStream fos = new FileOutputStream(path + fileName);  
                    fos.write(sb.toString().getBytes());  
                    fos.close();  
                }  
                return fileName;  
            } catch (Exception e) {  
                Log.e(TAG, "an error occured while writing file...", e);  
            }  
            return null;  
        }  
    }