SORU
10 Temmuz 2009, Cuma


Nasıl ilerleme iletişim ve arka plan iş parçacığı etkin olduğunda ekran yönlendirme işlemek için değiştirmek?

Benim program bir arka plan iş parçacığı bazı ağ aktivitesi. Başlamadan önce, bir ilerleme iletişim kutusu açılır. İletişim sahibe atlamamış. Bu sorun, iletişim ve arka plan iş parçacığı gidiyor) ise yönü değişir ekran dışında çalışır. Bu noktada uygulama ya çöküyor, ya da bütün konuları öldürüldü kadar kilitlenmeleri veya uygulamayı hiç çalışmıyor nerede garip bir sahne içine alır.

Nasıl ekran yönünü değiştirmek incelikle ele alabilir miyim?

Örnek kodu aşağıda kabaca gerçek programım ne devam etti

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();
        }
    };
}

Yığın:

E/WindowManager(  244): Activity MyAct has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@433b7150 that was originally added here
E/WindowManager(  244): android.view.WindowLeaked: Activity MyAct has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@433b7150 that was originally added here
E/WindowManager(  244):     at android.view.ViewRoot.<init>(ViewRoot.java:178)
E/WindowManager(  244):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:147)
E/WindowManager(  244):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:90)
E/WindowManager(  244):     at android.view.Window$LocalWindowManager.addView(Window.java:393)
E/WindowManager(  244):     at android.app.Dialog.show(Dialog.java:212)
E/WindowManager(  244):     at android.app.ProgressDialog.show(ProgressDialog.java:103)
E/WindowManager(  244):     at android.app.ProgressDialog.show(ProgressDialog.java:91)
E/WindowManager(  244):     at MyAct.send(MyAct.java:294)
E/WindowManager(  244):     at MyAct$4.onClick(MyAct.java:174)
E/WindowManager(  244):     at android.view.View.performClick(View.java:2129)
E/WindowManager(  244):     at android.view.View.onTouchEvent(View.java:3543)
E/WindowManager(  244):     at android.widget.TextView.onTouchEvent(TextView.java:4664)
E/WindowManager(  244):     at android.view.View.dispatchTouchEvent(View.java:3198)

OnSaveİnstanceState ilerleme iletişim kutusunu kapatmak için denedim, ama bu sadece anlık bir kaza önler. Arka plan iş parçacığı hala gidiyor, ve UI kısmen çizilmiş durumda. Tekrar çalışmaya başlamadan önce tüm app öldürmek gerekir.

CEVAP
10 Mart 2010, ÇARŞAMBA


Düzenleme:Google mühendisleri Dianne Hackborn tarif ettiği gibi bu yolu tavsiye, sakın (bir.k.bir. StackOverflow post hackbod). Daha fazla bilgi için this blog post Check out.


Bildirimde etkinlik bildirimi için bunu eklemek zorunda:

android:configChanges="orientation|screenSize"

gibi görünüyor

<activity android:label="@string/app_name" 
        android:configChanges="orientation|screenSize|keyboardHidden" 
        android:name=".your.package">

Sorun sistem yapılandırmada bir değişiklik ortaya çıktığında aktivite yok. ConfigurationChanges bkz.

Yani yapılandırma dosyasında bu koymak sisteminin etkinliği yok önler. Bunun yerine onConfigurationChanged(Configuration) yöntemi çağırır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • katherine gomez

    katherine go

    1 Aralık 2011
  • Attempts at least

    Attempts at

    1 Ocak 2007
  • Rozetked | Обзоры

    Rozetked |

    5 AĞUSTOS 2011