当前位置: 首页 > 知识库问答 >
问题:

android:窗口管理器:Android查看窗口泄露[重复]

杜俊晤
2023-03-14

就在我解决了我的第一个问题之后,这个问题出现了:(请帮我解决它...

03-02 12:47:02.785 9439-9439/com . ucu . CCS . class record E/window manager£Android . view . window leaved:Activity com . ucu . CCS . class record . log in已泄漏window com . Android . internal . policy . impl . phone window $ dec view { 6d 17 cc 4V . E.....稀有......D 0,0-1002,348}最初添加在此处的Android . view . viewrootimpl .(viewrootimpl . Java:465)在Android . view . windowmanager global . add view(windowmanager global . Java:277)在Android . view . windowmanager impl . add view(windowmanager impl . Java:69)在Android . app . dialog . show(dialog . Java:312)在com . ucu . CCS . class record . log in$attemptlogin . onpree

以下是我的代码:

buttonLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String instructor_id = editUser.getText().toString().trim();
                String password = editPass.getText().toString().trim();

                SharedPreferences preferences = getSharedPreferences("MyApp", MODE_PRIVATE);
                preferences.edit().putString("password", password).commit();
                preferences.edit().putString("inst_id", instructor_id).commit();

                if (editUser.getText().toString().equals("") || editPass.getText().toString().equals("")){
                    Toast.makeText(getApplicationContext(),"Please enter Instructor ID and Password", Toast.LENGTH_LONG).show();
                }else {
                    isOnline();
                }

            }
        });

public boolean isOnline(){
        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isConnectedOrConnecting()){
            new AttemptLogin().execute();
        }else {
            checkInternet();
        }
        return false;
    }

class AttemptLogin extends AsyncTask<String, String, String> {
        boolean failure = false;
        String inst_id = editUser.getText().toString();
        String password = editPass.getText().toString();

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(Login.this);
            pDialog.setMessage("Attempting login...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }

        @Override
        protected String doInBackground(String... params) {
            int success;
            try{
                List<NameValuePair> mList = new ArrayList<NameValuePair>();
                mList.add(new BasicNameValuePair("instructor_id", inst_id));
                mList.add(new BasicNameValuePair("password", password));

                Log.d("request!", "starting");

                JSONObject json = jsonParser.makeHttpRequest(LOGIN_URL, "POST", mList);
                Log.d("Login attempt", json.toString());

                success = json.getInt(TAG_SUCCESS);
                if (success == 1) {
                    Log.d("Login Successful!", json.toString());
                    Intent i = new Intent(Login.this, MainActivity.class);
                    startActivity(i);
                    //finish();
                    return json.getString(TAG_MESSAGE);
                }else{
                    Log.d("Login Failure!", json.getString(TAG_MESSAGE));
                    return json.getString(TAG_MESSAGE);
                }

            }catch (JSONException e){
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            session.setLogin(true);
            pDialog.dismiss();
            if (s != null){
                Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
            }
        }
    }

共有2个答案

巫马刚洁
2023-03-14

实际上,您的活动在某种程度上已经完成,因此您需要关闭对话。

在onPause()中,添加以下代码:

if(isFinishing()){
    if (pDialog!= null) {
        pDialog.dismiss();
        pDialog= null;
    }
}
柳涵映
2023-03-14

您试图在退出活动后显示一个对话框。在您的doInbackground中,当您移动活动时,请在开始活动(i)之前关闭对话框,试试这个,让我知道它是否有效。

 类似资料:
  • Window Manager 是一种特殊的 Xclient。 使用窗口管理器时,Xserver 并不直接与其它 Xclient 通信,而是通过 WM 中转,当一些消息被定义为 WM 指令时,它们会被拦截。例如 Alt+F4 关闭窗口、拖动标题栏…… 消息“打开链接 linuxtoy.org”,具体内容如下:     输入焦点在地址栏的范围内,“linuxtoy.org”,回车      Xserv

  • 问题内容: 我的新主项目之一将是一个简单的Window Manager,但是在开始之前,我需要了解一些事情: 哪种语言是最好的? 从哪里获得一些学习资源? 问题答案: 一个重要的决定是您将如何与X服务器通信。您可以将Xlib绑定用于您选择的语言,也可以使用更高级别的XCB绑定。(如果您很疯狂,则可以直接打开X服务器的套接字。) 要了解窗口管理器的行为方式,有两个文档指定了约定和策略:EWMH和IC

  • 窗口的内容: 在 RPG 中必须要使用很多的窗口。这些窗口如何管理呢,下面我们就来讲讲这个问题。 形如Window_Xxxx 的名字的脚本很多吧,但有两个尤其重要,那就是最上面的两个。 Window_Base,基本窗口,其父类是Window Window_Selectable,项目选择窗口,其父类是Window_Base 在 RGSS 中,Window类是预先编好的,它负责确定窗口边界和背景的绘画

  • 附上的图片是Android应用的。我正在尝试使用Android的UIAutomator查看器进行检查。在它中,我无法检查在前景上的弹出窗口。我想在该窗口中单击“解除” 请建议是否可以检测到这一点或使用任何其他工具

  • 问题内容: 我想创建一个供个人使用的简单堆叠窗口管理器,主要用于学习和挑战自我。 我浏览了的源代码,它的花样少,但由于它不是基于小部件工具箱的,因此它的级别似乎很低。1使用GTK +之类的工具箱会更好吗?恐怕其中的某些代码和库可能过于陈旧( 编辑: 已弃用),我希望窗口管理器使用相对较新的库。为了理解,我也将对如何从头启动窗口管理器的建议感兴趣-为此目的的教程并不多。 更新: 对于那些考虑类似项目

  • 问题内容: 我正在尝试创建系统覆盖图。但是我一直在“拒绝权限”。我正在使用SDK版本23。 我的清单文件: 我用来创建叠加层的代码: 问题答案: 首先,没有名为的权限。是的。 其次,如果您的年龄为23岁或更高,并且您正在运行Android 6.0+设备,则您的应用一开始将不会获得此权限。致电查看您是否具有权限,如果没有,则用于将用户引导到“设置”。