2010-10-24 26 views
45

Uzak bir arabirim ile bir hizmet yazdım ve bilgisayarımın Eclipse AVD'sine yükledim. Serviste yöntemleri başlatan ve başlatan bir istemci test kayışım var.Bir hizmetin hata ayıklanması

<?xml version="1.0" encoding="utf-8"?> 
<manifest 
xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.myname.gridservice" 
android:versionCode="1" 
android:versionName="1.0"> 
<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:debuggable="true"> 
    <service 
     android:enabled="true" 
     android:debuggable="true" 
     android:name="OverlayService"> 
     <intent-filter> 
      <action android:name="com.myname.OverlayService.SERVICE"/> 
      <action android:name="com.myname.gridservice.IRemoteInterface" /> 
     </intent-filter> 
    </service> 
</application> 
</manifest> 

hiçbir etkinlik etiketi vardır: hizmet için apaçık benzeyecek şekilde Başlangıçta Ben şimdi kaldırdık bir kontrol sınıfı ve aktivite tarafından yüklenen servisi vardı.

Eclipse'deki hata ayıklama simgesinden başlattığımda, konsol, bunun apk'yi yüklediğini (ki bu) olduğunu, ancak bir hata ayıklama iş parçacığı olarak görünmediğini ve hizmetin davranışı her ne kadar tetiklenmediğini söyler. Tamam, müşteri gördüğü kadarıyla. Hizmet etiketini ilişkili bir sınıfa sahip olan ve bunu başlatan bir etkinlik etiketine koyarsam, hata ayıklayabilirim

Bir etkinliğe sarılmadan servisi ayıklamak mümkün mü?

+1

Başka bir soruda cevabı bildiğini söylediniz. Sadece soruyu kendinize cevaplayın ve iki gün sonra da kabul edebileceksiniz. – Janusz

+0

Cevap İşte http://stackoverflow.com/questions/5379129/debugging-not-working-in-a-service-class-what-can-cause-this-issue –

cevap

6

Android.os.Debug.waitForDebugger() ile program aracılığıyla yapılması gerektiğini düşünüyorum; hizmetinizin ilk ilginç yöntemde (ı oluşturmak kullanılır):

İlk:

72

İşte dört adımda yapabilecekleriniz İkinci

/* (non-Javadoc)  
* @see android.app.Service#onCreate() 
*/ 
@Override 
public void onCreate() { 
super.onCreate(); 
//whatever else you have to to here... 
android.os.Debug.waitForDebugger(); // this line is key 
} 

: set mola noktaları waitForDebuggerCommand sonra. Üçüncüsü: Eclipse'de hata ayıklama düğmesiyle uygulamayı başlatın.

  • cd $PLATFORM_TOOLS
  • adb shell
  • am startservice -n com.google.android.apps.gtalkservice/com.google.android.gtalkservice.service.GTalkService
  • : Bir hizmeti başlatmak için Başlat adb ve komutu çalıştırın: (Muhtemelen artık apaçık ana fırlatma aktivitesini alınmasını sağlaması gerekir)

    Son

+1

de, ben sadece fark bu benim taklit cihazlarda iyi çalışıyor olsa da, benim htc ilham 4g üzerinde hiç çalışmıyor. hizmetin cmd satırından başlatılması komutu görünüyor, ancak hata ayıklayıcı asla eklemez. neden emin değilim ... daha önce önerildiği gibi bir ana faaliyet başlatmaya geri döndü ... –

+2

"waitForDebugger" satırının, hizmetin bu satırda kesileceği anlamına gelmediğini unutmayın. Basitçe, "kesme noktaları için izlemeye başlayın ve * onları durdurun *" anlamına gelir. " –

+3

Uyarı - Aynı zamanda, bir hata ayıklayıcı gerçekten eklenmemişse, bu ifadeyi izleyen kodun yürütülmeyeceği anlamına da gelir. –

18

sadece kodunuzdaki bu kod satırını unutma ve APK'nızı serbest bıraktığınızdan emin olun. Eğer uygulamanızı hata ayıklayıcı olmadan çalıştırmayı denerseniz, aşağıdaki çizgi sıkışır.

android.os.Debug.waitForDebugger(); 

ayrıca ayıklayıcı bağlı olup olmadığını belirlemek için aşağıdaki kullanabilirsiniz: Bu Android Studio çalışır

android.os.Debug.isDebuggerConnected(); //Determine if a debugger is currently attached. 
2

. Sanırım Eclipse'de de benzer bir yol olabilir.

  1. "
13

enter image description here

Yani bu Ornithopter katedilmiştir ... ama onların cevabı aslında demiyor servis işleme hata ayıklayıcı ekleyin hata ayıklama modunda projenizi çalıştırın Nasıl yapılır. "Bunu kodunuza yaz" gibi şeyler içeren yukarıdaki yanıtlar benim için çalışmadı.

Uygulamanızı çalıştırın. Fotoğraftaki düğmeye basın, arka planı için bana mesajını seçin. Senkronizasyonun sadece sync adaptörleri olup olmadığını bilmiyorum ..

İlgili konular