Android:窗口管理器:android查看窗口泄露
当我解决我的第一个问题后,这一个出现:(请帮我解决它..
03-02 12:47:02.785 9439-9439 / com.ucu.ccs.classrecord E / WindowManager:android.view.WindowLeaked:Activity com.ucu.ccs.classrecord.Login泄露了窗口com.android.internal.policy。 impl.PhoneWindow $ DecorView {6d17cc4 VE .... R ...... D 0,0-1002,348}这是最初在android.view.ViewRootImpl。(ViewRootImpl.java:465)处添加的。 view.WindowManagerGlobal.addView(WindowManagerGlobal.java:277)at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)at android.app.Dialog.show(Dialog.java:312)at com.ucu.ccs.classrecord 。登录android.os.AsyncTask.execute(AsyncTask.java:535)上的android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587),在com.ucu.ccs处登录$ AttemptLogin.onPreExecute(Login.java:158)。 class android.view.View.performClick(View.java:5197)at android.js上的classrecord.Login.isOnline(Login.java:113)在com.ucu.ccs.classrecord.Login $ 1.onClick(Login.java:73)。 view.View android.os.H上的android.os.Handler.handleCallback(Handler.java:739)上的$ PerformClick.run(View.java:20926) 在android.app.ActivityThread.main(ActivityThread.java:5942)处的android.os.Looper.loop(Looper.java:145)处的java.lang.reflect.Method.invoke上的andler.dispatchMessage(Handler.java:95) (Native Method)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1399)at com.android.internal.os(java.lang.reflect.Method.invoke(Method.java:372) .ZygoteInit.main(ZygoteInit.java:1194)
这里是我的代码:
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();
}
}
}
如果您的活动已被破坏,但您的对话仍在显示,则会发生此错误。 所以你已经在你的activity的onDestroy()中添加了这些代码
@Override
public void onDestroy() {
super.onDestroy();
if (dialog != null) {
dialog.dismiss();
dialog = null;
}
}
希望这对你有用。
您在退出某个活动后尝试显示一个对话框。 在您的doInBackground中,当您正在转移您的活动时,在startActivity(i)之前关闭对话框,尝试此操作并让我知道它是否有效。
其实你的活动正在完成一些如何,所以你需要关闭对话框。
在onPause()添加下面的代码
if(isFinishing()){
if (pDialog!= null) {
pDialog.dismiss();
pDialog= null;
}
}
链接地址: http://www.djcxy.com/p/19939.html