相关疑难解决方法(0)

当进度对话框和后台线程激活时,如何处理屏幕方向更改?

我的程序在后台线程中执行一些网络活动.在开始之前,它会弹出一个进度对话框.该对话框在处理程序上被关闭.这一切都很好,除非在对话框启动时屏幕方向发生变化(后台线程正在运行).此时,应用程序崩溃或死锁,或进入一个奇怪的阶段,在应用程序完全无法工作之前,直到所有线程都被杀死.

如何优雅地处理屏幕方向变化?

下面的示例代码大致匹配我的真实程序:

public class MyAct extends Activity implements Runnable {
    public ProgressDialog mProgress;

    // UI has a button that when pressed calls send

    public void send() {
         mProgress = ProgressDialog.show(this, "Please wait", 
                      "Please wait", 
                      true, true);
        Thread thread = new Thread(this);
        thread.start();
    }

    public void run() {
        Thread.sleep(10000);
        Message msg = new Message();
        mHandler.sendMessage(msg);
    }

    private final Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            mProgress.dismiss();
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

堆:

E/WindowManager(  244): Activity MyAct has …
Run Code Online (Sandbox Code Playgroud)

android android-dialog android-activity

515
推荐指数
9
解决办法
23万
查看次数

android活动已泄露窗口com.android.internal.policy.impl.phonewindow $ decorview问题

我正在使用Android应用程序来显示网络错误.

NetErrorPage.java

package exp.app;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class NetErrorPage extends Activity implements OnClickListener {    

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.neterrorlayout);
        Button reload=(Button)findViewById(R.id.btnReload);
        reload.setOnClickListener(this);    
        showInfoMessageDialog("Please check your network connection","Network Alert"); 
    }

    public void onClick(View arg0)             
        {
            if(isNetworkAvailable())
            {                   
                Intent myIntent = new Intent((Activity)NetErrorPage.this, MainActivity.class);   
                myIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);              
                ((Activity)NetErrorPage.this).startActivity(myIntent);
                finish();
            }
            else
                showInfoMessageDialog("Please check your network connection","Network Alert");
    }

    public …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks android-layout android-alertdialog

67
推荐指数
4
解决办法
13万
查看次数

android.view.WindowLeaked

inviteBu.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(ChoiceList.size()>0)
             {

                    LayoutInflater factory = LayoutInflater.from(MobileConnectActivity.this);
                    final View textEntryView = factory.inflate(R.layout.invite_dialog, null);
                    final EditText et =(EditText) textEntryView.findViewById(R.id.usercontent_edit);

                   dia= new AlertDialog.Builder(MobileConnectActivity.this)
                        .setTitle(getString(R.string.invite_input_content))
                        .setView(textEntryView)
                        .setPositiveButton(getString(R.string.invite_send), new DialogInterface.OnClickListener() {
                            public void onClick(final DialogInterface dialog, int whichButton) {
                                dialog.dismiss();
                                 if(et.getText().toString()==null && et.getText().equals("") )
                                {
                                    Toast.makeText(getApplicationContext(), getString(R.string.invite_content_check), Toast.LENGTH_SHORT).show();
                                }
                                 else{


                                     new AsyncTask<Void, Void, String>() {

                                         CustomDialog mProgressBar = new CustomDialog(MobileConnectActivity.this, R.style.dialog);

                                        protected void onPreExecute() {

                                            mProgressBar.show();
                                        };

                                        protected void onCancelled() { …
Run Code Online (Sandbox Code Playgroud)

android

30
推荐指数
6
解决办法
4万
查看次数

Android:对话:我应该隐藏还是暗淡

我正在使用Dialog在我的应用程序中创建一些快速视图(如登录输入名称等)

而我正在徘徊更好的东西:隐藏或解雇.

我知道他们两个都做了但是我一直在徘徊,如果最好只是隐藏一个Dialog并在我需要时再次显示它,或者将它解散并重新创建它.

我的对话框很小,在我的代码中是非常静态的,因此我没有大量的实例.

所以有人可以给我使用hide而不是dismiss的优点和缺点.

贾森

android dialog

26
推荐指数
3
解决办法
2万
查看次数

活动已泄露窗口 - Android

看看这些代码:

Android上的自定义视图和窗口属性

问题

当我点击"主页按钮"时,exception抛出:Activity泄漏了窗口......从这一行:

localWindowManager.addView(colourView, layoutParams);
Run Code Online (Sandbox Code Playgroud)

问题(S)

你知道是什么原因引起的吗?

当我用后退按钮关闭应用程序时,问题不会发生.

异常/错误日志

W/InputManagerService(   96): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@40908148 (uid=10056 pid=1368)
D/CordovaActivity( 1368): CordovaActivity.onDestroy()
D/CordovaWebView( 1368): >>> loadUrlNow()
E/WindowManager( 1368): Activity com.phonegap.helloworld.HelloWorld has leaked window pl.edu.uj.tcs.student.xxx.Display$Layer@40589368 that was originally added here
E/WindowManager( 1368): android.view.WindowLeaked: Activity com.phonegap.helloworld.HelloWorld has leaked window pl.edu.uj.tcs.student.xxx.Display$Layer@40589368 that was originally added here
E/WindowManager( 1368):         at android.view.ViewRoot.<init>(ViewRoot.java:258)
E/WindowManager( 1368):         at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
E/WindowManager( 1368):         at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
E/WindowManager( 1368):         at android.view.Window$LocalWindowManager.addView(Window.java:424)
E/WindowManager( 1368):         at pl.edu.uj.tcs.student.xxx.Display.setColorsViews(Display.java:181)
E/WindowManager( 1368): …
Run Code Online (Sandbox Code Playgroud)

java android android-activity cordova

25
推荐指数
2
解决办法
4万
查看次数

Activity已在alertDialog show()方法中泄露窗口

由于使用AlertDialog,我在运行时遇到窗口泄漏错误.

我在下面的代码中指出了错误行:

堆栈跟踪:

08-18 02:48:04.489  28893-28893/? E/WindowManager? Activity com.ms.ha.fragment.FirstActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{52e58540 V.E..... R.....ID 0,0-1026,585} that was originally added here
    android.view.WindowLeaked: Activity com.ms.ha.fragment.FirstActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{52e58540 V.E..... R.....ID 0,0-1026,585} that was originally added here
            at android.view.ViewRootImpl.<init>(ViewRootImpl.java:345)
            at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:239)
            at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
            at android.app.Dialog.show(Dialog.java:281)
            at com.ms.ha.fragment.TourGuideLoadURLFragment$WebAppInterface.moveToNextScreen(TourGuideLoadURLFragment.java:116)
            at android.webkit.WebViewCore.nativeMouseClick(Native Method)
            at android.webkit.WebViewCore.nativeMouseClick(Native Method)
            at android.webkit.WebViewCore.access$6800(WebViewCore.java:59)
            at android.webkit.WebViewCore$EventHub.dispatchWebKitEvent(WebViewCore.java:1793)
            at android.webkit.WebViewInputDispatcher.dispatchWebKitEvent(WebViewInputDispatcher.java:689)
            at android.webkit.WebViewInputDispatcher.dispatchWebKitEvents(WebViewInputDispatcher.java:639)
            at android.webkit.WebViewInputDispatcher.access$800(WebViewInputDispatcher.java:78)
            at android.webkit.WebViewInputDispatcher$WebKitHandler.handleMessage(WebViewInputDispatcher.java:1153)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:814)
            at java.lang.Thread.run(Thread.java:841)
Run Code Online (Sandbox Code Playgroud)

FirstActivity.java:

 public class FirstActivity extends FragmentActivity  implements View.OnClickListener{ …
Run Code Online (Sandbox Code Playgroud)

android android-alertdialog

22
推荐指数
3
解决办法
5万
查看次数

为什么可运行的回调会自动销毁活动?

我想知道我们是否有可能postDelayed在android上处理/检测带有延迟(方法)的可运行回调?

例如,handler.postDelayed(new Runnable()...我的应用程序(用于测试目的的应用程序)有一个或几个splashscreen(运行).在这个应用程序中,我还有一个库(我正在应用程序中创建和使用它)以及一些在类上运行的IntentService类.

有时,当应用程序运行那些splashscreenActivities(for Testing purpose)时,我正在创建的库可能会在UI中自动弹出一些活动.但似乎如果这些活动出现在splashscreen活动上并且splashscreen正在被销毁,那些活动(自动弹出)也将被销毁并在logcat中记录"泄露的窗口"消息.

问题是:

  • 不应自动关闭UI中自动显示的那些活动,这是禁止的.它需要用户进行交互以关闭该活动并返回应用程序的正常行为.
  • 此外,该库对应用程序的UI一无所知.

所以我的问题是(相对于我正在创建的库方面而没有UI应用程序流的信息):

  • 有没有办法检测是否在相对于库方面的应用程序中创建了一些postDelayed方法?如果是,我该如何处理这个问题呢?

PS:请注意,通常情况下,我正在使用自动出现的假设活动的对话框.

UPDATE

图

图解说明:

现在我有一个正在执行Splashscreen的案例.

扩展IntentService类的类已收到来自Internet的请求,该请求将启动一个Activity.

同时启动了启动画面postdelayed,其他活动已创建并在UI中显示.当X秒已经过去且另一个Activity未被销毁时,将创建Next Activity并自动销毁另一个Activity.在这样做时,Android会相对于Activity抛出"泄露的窗口"消息.

java android android-activity android-handler android-looper

17
推荐指数
1
解决办法
624
查看次数

活动已泄露窗口/对话框(再次!)

是的,我已经阅读了关于同样问题的无数问题.

我的代码很简单:我只是用showDialog(int id)onCreate,然后我旋转设备.代码就是那个(测试用例),这足以导致问题.我的理解是,showDialog方法会处理这个......对话框会消失,然后onCreate在更改后稍后调用,再次干净地显示对话框.但不是.这个推理有什么问题?

我(我想)了解原因,但我不知道如何解决这个问题.即使是iosched应​​用程序在实现EULA窗口时也存在同样的问题(在eula对话框上更改方向并且您会收到泄漏).我已经阅读了关于关闭onPause的对话框的内容,但是1)我没有显示它的风险,并且2)跟踪对话似乎太多了.必须有一个更强大的方法.

那么......处理这个问题需要哪些更干净的代码呢?

谢谢.


日志错误输出:

01-30 00:27:18.615: E/WindowManager(20316): Activity com.test.PreSetupActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@418e0c28 that was originally added here
01-30 00:27:18.615: E/WindowManager(20316): android.view.WindowLeaked: Activity com.test.PreSetupActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@418e0c28 that was originally added here
01-30 00:27:18.615: E/WindowManager(20316):     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:343)
01-30 00:27:18.615: E/WindowManager(20316):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:245)
01-30 00:27:18.615: E/WindowManager(20316):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:193)
01-30 00:27:18.615: E/WindowManager(20316):     at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:118)
01-30 00:27:18.615: E/WindowManager(20316):     at android.view.Window$LocalWindowManager.addView(Window.java:537)
01-30 00:27:18.615: E/WindowManager(20316):     at …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks dialog window android-activity

14
推荐指数
1
解决办法
1万
查看次数

跟踪Android中的内存/窗口泄漏?

如何追踪Android开发中的内存泄漏?我正在开发eclipse IDE来开发应用程序.我无法找到如何纠正内存或窗口泄漏例外?任何的想法.

主要是窗口泄漏错误会引发非法参数异常?如何纠正这两个og.请帮忙.

android memory-leaks

8
推荐指数
1
解决办法
5393
查看次数

Android:对话框,更改方向时出现"窗口泄露"问题

我有两个类一个适配器和一个活动,我有一个dailog,我在适配器中显示.当我试图更改屏幕方向时,我收到错误.我尝试在我的活动中覆盖以下代码.但似乎没什么用

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
          Log.d(TAG, "configuration changed : " +newConfig);

    }
Run Code Online (Sandbox Code Playgroud)

下面是我的适配器代码

public AddressPopUpAdapter(Activity activity, Activity parent,
            int resourceId, ArrayList<PopUpMenu> items, int renderer) {
        super(activity, resourceId, items);
        this.items = items;
        this.renderer = renderer;
        this.activity = activity;
        this.parentActivity = parent;
        popupMenuUtils = new PopupMenuUtils();
        dialog = new Dialog(parentActivity);
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        popUpMenu = items.get(position);
        Log.d(TAG, "location" + popUpMenu);
        if (popUpMenu == null) {
            return null;
        }
        Log.d(TAG, "location" + popUpMenu); …
Run Code Online (Sandbox Code Playgroud)

android android-alertdialog

6
推荐指数
1
解决办法
3464
查看次数