2014-11-04 28 views
8

Bir Android uygulaması geliştiriyorum ve beklediğim gibi kodumun çöktüğü durumlar (hatalar, boş göstergeler vb.) Var.Uygulama kilitlendiğinde ne olur?

Uygulama çöktüğünde, bunu yapmak için herhangi bir kod yazmamış olmama rağmen (bu varsayılan davranış olduğunu mu sanıyordum ?!) ancak sorun şu ki, uygulama yanlış bir durumda açılıyor.

Burada uygulama başladığında genelde böyle olur:

  • Başlangıçta uygulaması bir "sıçrama ekran" ile açılır. Bu ekran, kullanıcının ortak tercihlerde kalıcı belirteçler kullanarak kimliğini doğrulamaya ve bazı varsayılan değerleri sunucudan yüklemeye ve bunları bazı hizmetlerde ısrar etmeye çalışır.
  • Oturum açma başarısına bağlı olarak, ana ekrana veya giriş ekranına gider.

uygulamamız tüm gayet iyi çalışıyor ve beklendiği gibi başlatma dizisi çalıştırılır ama bir bir kaza sonucu, ekranı fragmanında nüfuslu oldum olacak değerler (örneğin, yeniden başlatıldığında, normal başladığında Kullanıcıda oturum açarken veya varsayılan değerleri sunucudan yüklerken) hepsi geçersizdir, yani hiçbir zaman çalıştırılmazlar.

Bu, uygulamanın kendini yeniden başlatmasıyla ilgili olayların sırasının tamamen yanlış olduğuna inanmamı sağlar. Örneğin, uygulamada Başlatıcı olarak belirtilen doğru etkinliği kullanarak uygulamayı yeniden başlatmak yerine, yanlış bir şekilde yeniden başlatılıyor gibi görünmektedir. yanlış etkinlik.

İşte soru şu: Bir çarpışma gerçekleştiğinde uygulamamın kendini yeniden başlatması gerektiğini belirleyen ve bunun nasıl başlatılması gerektiğini belirleyen nedir? Uygulama bir kilitlenmeden başladığında yakalayabileceğim herhangi bir olay var mı, böylece başlatma sırasını geçersiz kılabilir miyim? Uygulamayı her zaman başlatıcı etkinliğinden başlamak için zorlamanın bir yolu var mı? peşin

Çok teşekkürler,

+1

Sadece bazı bilgileri eklemek için, tekrar arayarak uygulamanın açılmasını engelleyebilirsiniz: android.os.Process.killProcess (android.os.Process.myPid()); Küresel bir Thread.UncaughtExceptionHanlder içinde System.exit (0) . Bunun ne kadar doğru olduğunu anlamıyorum (muhtemelen fazla değil). Ama ben gerçekten bir uygulama bu senaryolarda nasıl davranması gerektiğini bilmek istiyorum – JML

+0

Çok teşekkür ederim JML. Bu gerçekten yararlıdır; bununla birlikte, uygulamanın kendisini yeniden başlattığını özellikle bilmediğimi belirtmeliyim ve Android işletim sisteminin işletim sistemi tarafından otomatik olarak yeniden başlatılması gibi görünen "standart yol" lara mümkün olduğunca yakın kalmak istiyorum.Bununla birlikte, Launcher bayrağına saygı göstererek veya en azından başlatma sırasını geçersiz kılmak için bana yardımcı olacak şekilde yeniden başlatıldığında doğru şekilde davranmasını isterim. Yine, öneriniz için çok teşekkür ederim. – kha

cevap

2

bir etkinlik ön plan faaliyeti çalışan süreç uzağa giderse geçerli bir kayıtlı durumu yoksa, sistem uzağa o aktiviteyi fırlatır, Çarpma sonucu, yeniden başlatılır bunun için (tipik olarak duraklatılır ve sistem, duraklamadan önceki onSaveInstanceState sonucunu verir). Sistem bu aktiviteyi atıp atmamaya karar verdikten sonra, şu anda hangi etkinliğin yığının en üstünde olduğuna devam edecektir. Bu sizin faaliyetlerinizden biri ise, ya çökmüş olanın ardında bir başkası olduğu için ya da çökmüş bir şekilde duraklatılmış duraklama durumu olduğu için, sistem bu üst etkinliği göstermek için işleminizi yeniden başlatır. AndroidManifest ana etkinliği (başlatıcı etkinliği) bildirimi için clearTaskOnLaunch="true" ayarını ve ana hariç diğer etkinlikler için android:finishOnTaskLaunch ="true" ayarlamayı deneyebilir ve bunun, uygulamanın çökme sonrasında başka bir durumda yeniden başlatılmasını engelleyip engellemediğini görebilirsiniz. Başka bir yol, faaliyetinizin nerede başladığını kontrol etmek ve ardından bu etkinliğin tüm gerekli verilere sahip olup olmadığını kontrol etmek için başlangıç ​​noktasında kontrol etmektir. Gerekli tüm veriler yoksa, başlatıcı etkinliğine yönlendirin. Bu yardımcı olur umarım.

+0

Açıklamanız için teşekkür ederiz. ClearTaskOnLaunch yaklaşımını denedim ama benim için iyi değil. Uygulamanın gerçekten de, çöküşün başladığında başlatıcı etkinliğine gittiği halde, aynı zamanda yeniden başladığında da oraya gider (uygulamayı en aza indirir -> uygulamaya git, şimdi beni giriş ekranına götürmez. İstiyorum). İkinci yaklaşımın problemi, 20'den fazla farklı aktivitenin, bazıları da birkaç seviyenin derinlemesine yuvalanmasıdır. İhtiyaç duydukları her şeye sahip olmaları durumunda başlangıç ​​noktasındaki tüm kontroller çok hantal olacaktır ama başka bir seçenek yoksa bunu yapmak zorunda kalacağım. – kha

İlgili konular