相关疑难解决方法(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万
查看次数

最佳实践:方向更改期间的AsyncTask

AsyncTask 在另一个线程中运行复杂任务是一件好事.

但是当AsyncTask仍在运行时有方向更改或其他配置更改时,将Activity消除并重新启动电流.并且当实例AsyncTask连接到该活动时,它会失败并导致"强制关闭"消息窗口.

所以,我正在寻找某种"最佳实践"来避免这些错误并防止AsyncTask失败.

到目前为止我看到的是:

  • 禁用方向更改.(当然不是你应该如何处理它.)
  • 让任务存活并通过新的活动实例更新它 onRetainNonConfigurationInstance
  • 只需在销毁时取消任务,ActivityActivity在再次创建时重新启动它.
  • 将任务绑定到应用程序类而不是活动实例.
  • "shelf"项目中使用的一些方法(通过onRestoreInstanceState)

一些代码示例:

屏幕旋转期间的Android AsyncTasks,第一部分第二部分

ShelvesActivity.java

你能帮我找到最好的方法来解决问题并且易于实现吗?代码本身也很重要,因为我不知道如何正确解决这个问题.

multithreading android exception

149
推荐指数
3
解决办法
7万
查看次数

android视图没有附加到窗口管理器

我有以下一些例外情况:

java.lang.IllegalArgumentException: View not attached to window manager
at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355)
at android.view.WindowManagerImpl.updateViewLayout(WindowManagerImpl.java:191)
at android.view.Window$LocalWindowManager.updateViewLayout(Window.java:428)
at android.app.Dialog.onWindowAttributesChanged(Dialog.java:596)
at android.view.Window.setDefaultWindowFormat(Window.java:1013)
at com.android.internal.policy.impl.PhoneWindow.access$700(PhoneWindow.java:86)
at com.android.internal.policy.impl.PhoneWindow$DecorView.drawableChanged(PhoneWindow.java:1951)
at com.android.internal.policy.impl.PhoneWindow$DecorView.fitSystemWindows(PhoneWindow.java:1889)
at android.view.ViewRoot.performTraversals(ViewRoot.java:727)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4338)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索它,看到它与弹出窗口和转动屏幕有关,但没有引用我的代码.

问题是:

  1. 有没有办法找出这个问题发生的确切时间?
  2. 除了转动屏幕外,还有其他事件或动作会触发此错误吗?
  3. 我该如何防止这种情况发生?

android exception

110
推荐指数
3
解决办法
10万
查看次数

AsxyTask中的Android上下文泄漏

如果我正确地解释了这篇文章,那么将活动上下文传递AsyncTasks给潜在的泄漏,因为在任务仍在运行时活动可能会被销毁.

你是如何处理这一点的AsyncTasks,不是内部的,需要访问资源或更新UI?

另外,如果需要引用进度对话框来解除它们,如何避免泄露上下文?

android memory-leaks android-context android-asynctask

11
推荐指数
1
解决办法
6963
查看次数

Android生命周期哪个事件在生命周期中只触发一次?

我已经阅读了一些博客并访问了一些网站.我想知道在生命周期中哪一个事件只被触发了一次.在阅读博客后,我意识到该onCreate()方法在生命周期中只被触发一次.我不知道我是对还是错.现在我的问题是,我想解雇任何只有在我改变横向或纵向方向时触发一次的事件,而不是这个事件没有被触发意味着如果用户改变方向而不是未被触发的事件.我想知道在启动Activity之后哪个事件触发了一次.这个onCreate()

android android-lifecycle

3
推荐指数
1
解决办法
5996
查看次数