Zaman uyumsuz programlama en iyi uygulamalar
Son zamanlarda 8,000-10,000 kod satırları oldu kabaca olan ilk Android uygulamamı yazdım. Sürekli normal tasarım desenleri kullanımı engelleyen tek şey zaman uyumsuz çağrı (açılış diyaloglar, faaliyetler, vb.) android ağır kullanın. Bu nedenle, benim kod çok hızlı bir şekilde"", ve ben sonunda sevmediğim için bazı derslere bakmaya başladı. spagetti gibi bakmaya başladı
Herkes tavsiye ederim bu gibi sistemler için özel tasarım desenleri veya programlama yöntemleri var mı? Yönetilebilir zaman uyumsuz kod yazmak için herhangi bir öneriniz var mı?
CEVAP
- Global değişkenler kullanmak
Eğer Intent.putExtra()
basit aramalar ile kodunuzu karışıklık ve her benzersiz bu şeyler yönetmek Activity
Eğer uygulama içinde global değişkenler kullanmak zorundasın. Uygulama hayatta olduğu sürece gereken Application
ve mağaza veri uzatın. Aslında, use this excellent answer uygulamak için. Bu faaliyetler arasında bağımlılıkları tamamen ortadan kalkıyor. Örneğin, bir "" uygulama uygulama yaşam döngüsü - bu sadece bunun için mükemmel bir araçtır sırasında. username gerekir ki Intent.putExtra()
kirli aramaları gerek.
- Stilleri kullanın
İlk Android uygulaması yaparken ortak bir hata genellikle sadece XML görünümlerini yazmaya başlayın. XML dosyaları (sorunsuz ve çok hızlı) kodu çok sayıda satıra kadar gidecek. Burada sadece belirli bir davranışı uygulamak için style
öznitelik kullanmak bir çözüm olabilir. Örneğin, bu kod parçası göz önünde bulundurun:
values/styles.xml:
<style name="TitleText">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:textSize">18sp</item>
<item name="android:textColor">#000</item>
<item name="android:textStyle">bold</item>
</style>
layout/main.xml:
Eğer varsa, şimdi, hadi, TextView
s ve ikisi de aynı davranışı olmalıdır iki, onları TitleText
tarzı kullanmak demek. Örnek kod:
<!--- ... -->
<TextView
android:id="@ id/textview_one"
style="@style/TitleText"
/>
<TextView
android:id="@ id/textview_two"
style="@style/TitleText"
/>
<!--- ... -->
Basit ve kod yinelenen gerek yok. Eğer gerçekten daha fazla bu konu üzerinde görünmesini istiyorsanız, lütfen Layout Tricks: Creating Reusable UI Components bak.
- Dizeleri kullanın
Bu nokta, ama önemli bir söz olduğunu düşünüyorum kısa. Geliştiriciler yapabilecek başka bir hata atlamak içinstrings.xmlve sadece UI iletileri (ve öznitelik adları) içinde kod yazma ihtiyacı olacaktır). Uygulamanız korumak için daha kolay hale getirmek için; sadece mesajları tanımlamak ve niteliklerinistrings.xmldosya.
- Ve küresel aracı bir sınıf oluşturun
İlk başvurumda yazdığım zaman sadece (ve çoğaltılamaz) ben gereken yere yöntemleri yazdı. Sonuç? Çeşitli etkinlikler arasında aynı davranışları vardı bu yöntem çok. Öğrendiklerini aracı bir sınıf yapmak. Örneğin, diyelim faaliyetlerinin tüm web isteklerini yapmak zorunda söyle. Bu durumda, skip 16* *gerçek içinde onları tanımlamak ve statik bir yöntem yapmak için. Örnek kod:
public final class Tools {
private Tools() {
}
public static final void sendData(String url,
String user, String pass) {
// URLConnections, HttpClients, etc...
}
}
Şimdi, sadece bu kod veri göndermek gerekiyor Activity
sunucu doğru senin: aşağıda kullanabilirsiniz
Tools.sendData("www.www.www", "user", "pass");
Ancak, ne demek istediğimi anladınız. Bu "" . desen kullanın ^em>gerekkodunuzu berbat sizi koruyacaktır.
- Kullanıcı uygulama ile etkileşim için gereken özel sınıflar davranışlarını açıklayalım
Bu muhtemelen en yararlı noktasıdır. Sadece tanımlamak için "kullanıcı uygulama ile etkileşim gerekiyor" diyelim ki sen bir Menu
, hangi davranışları çok uzun açısından hatları, neden saklıyoruz Menu
'nin hesaplamalarında aynı sınıf mı? Her küçük parça Activity
sınıf kodu acıklı bir parça uzun olacak - kod gibi "spagetti". Örneğin, bu gibi bir şey yerine:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem item;
item = menu.findItem(R.id.menu_id_one);
if (aBooleanVariable) {
item.setEnabled(true);
} else {
item.setEnabled(false);
}
// More code...
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem i) {
// Code, calculations...
// ...
// ...
return super.onOptionsItemSelected(i);
}
böyle bir şey için yeniden tasarlamak
private MyCustomMenuInstance mMenuInstance;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mMenuInstance = new MyCustomMenuInstance();
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
mMenuInstance.onPrepareOptionsMenu(menu);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem i) {
mMenuInstance.onOptionsItemSelected(i);
return super.onOptionsItemSelected(i);
}
, 25**: örneğin
public class MyCustomMenuInstance {
// Member fields..
public MyCustomMenuInstance() {
// Init stuff.
}
public void onPrepareOptionsMenu(Menu menu) {
// Do things..
// Maybe you want to modify a variable in the Activity
// class? Well, pass an instance as an argument and create
// a method for it in your Activity class.
}
public void onOptionsItemSelected(MenuItem i) {
// Do things..
// Maybe you want to modify a variable in the Activity
// class? Well, pass an instance as an argument and create
// a method for it in your Activity class.
}
}
Bunun nereye gittiğini görüyorsunuz. Liste uzun olduğu pek çok şey için bu geçerli olabilir, *27 örneğin, *, onCreateOptionsMenu
**28, . Daha "uygulamalar" Google bazı örnek uygulamalar here görebilirsiniz. en iyi öğrenin Güzel ve doğru bir şekilde uygulanan, onlar için bak.
Son bir söz; kodunuzu, özellikle doğru bir şekilde mantıklı bir şekilde ve değişkenleri ve yöntemleri adı temiz kalsın. Her zaman, her zaman kodunuzu nerede olduğunu öğrenin - bu çok önemli.
Ne zaman uyumsuz ve paralel programlam...
Güvenli bir şekilde C zaman uyumsuz yö...
varsayılan oturum Apache Tomcat uygula...
Zaman uyumsuz (:: başlatmak zaman uyum...
Current zaman uyumsuz / çalışmak için ...