2011-01-21 46 views
55

Tôi có một dịch vụ với một trình xử lý phải viết "Hello" trong logcat cứ sau 5 giây. Nhưng nó không viết gì trên logcat ... Nó giống như dịch vụ không thực hiện, và tôi đặt một điểm ngắt trên nó và chế độ gỡ lỗi không bao giờ dừng lại trên điểm ngắt.Tại sao dịch vụ đơn giản này không bắt đầu?

Tôi bắt đầu dịch vụ, trong hoạt động đầu tiên của ứng dụng của tôi, với điều này:

startService(new Intent(GPSLoc.this, MyServiceNotifications.class)); //enciendo el service 

Tôi chắc chắn rằng mã startService được thực hiện vì nó được gọi là trước khi bắt đầu hoạt động khác, và các hoạt động khác bắt đầu .

Đây là mã của dịch vụ của tôi:

public class MyServiceNotifications extends Service { 

    boolean serviceStopped; 

    private Handler mHandler; 
    private Runnable updateRunnable = new Runnable() { 
     @Override 
     public void run() { 
      if (serviceStopped == false) 
      { 
       createNotificationIcon(); 
      } 
      queueRunnable(); 
     } 
    }; 

    private void queueRunnable() { 
     // 600000 : cada 10 minutos, comprueba si hay nuevas notificaciones y actualiza la 
     // notification BAR 
     mHandler.postDelayed(updateRunnable, 5000); 

    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     serviceStopped = false; 

     // //////////////////////////////////////MANEJADOR SIMILAR A UN HILO 
     mHandler = new Handler(); 
     queueRunnable(); 
     // ///////////////////////////////////// FIN MANEJADOR 
    } 

    @Override 
    public void onDestroy() { 
     serviceStopped = true; 
    } 

    @Override 
    public void onStart(Intent intent, int startid) { 

    } 

    public void createNotificationIcon() 
    { 
     Log.d("MyServiceNotifications", "Hello"); 
    }  
} 
+10

bạn có khai báo dịch vụ trong tệp kê khai không? – Franco

+0

đặt một logcat bên trong onCreate(), có được sử dụng không? Ngoài ra, khi nào bạn gọi run() trên updateRunnable? Tôi không thể thấy rằng việc thực hiện – Jimmy

+0

ohh đúng, tôi tha thứ để đưa vào maNIFEST !! cảm ơn – NullPointerException

Trả lời

163

Bạn đã khai báo dịch vụ ở số AndroidManifest.xml?

+7

Wow, bây giờ tôi cảm thấy ngớ ngẩn :) Tôi ngạc nhiên là không có lỗi nào được ghi lại khi điều này xảy ra giống như vậy đối với Hoạt động. –

+1

Cái thở hổn hển xảy ra khi anh nhận ra rằng anh đã quên thứ gì đó rất đơn giản, đặc biệt là sau khi cuộn lên và xuống mã trong nhiều giờ ... lol. – user3635998

+0

Nó cũng cần được khai báo trong phần . Đừng hỏi tôi làm thế nào tôi phát hiện ra ... – Tequilaman

13

Hi mã u viết đang làm việc tốt. Có thể bạn quên mã sau trong tệp kê khai trước khi đóng thẻ ứng dụng.

<application> 
    .... 
    <service android:name=".MyServiceNotifications"/> 
</application> 
+2

Phiếu bầu của tôi là dành cho "trước khi đóng thẻ ứng dụng". Lập trình viên làm những sai lầm ngớ ngẩn! –

+0

Điều này sẽ hiển thị nếu bạn chạy Phân tích ... Kiểm tra Mã trong tệp kê khai. – Merk

58

Rất quan trọng: viết không gian tên một cách chính xác, ví dụ:

<service android:name="com.example.data.synchronization.SynchronizationService"/> 

trong tôi AndroidManifest.xml trước đây nó được (sai):

<service android:name="com.example.data.SynchronizationService"/> 

Không có dịch vụ bắt đầukhông có thông báo lỗi!

+1

Giải pháp này thực sự đã giúp tôi rất nhiều! – marcos1490

+0

Xấu hổ để thừa nhận nó nhưng tôi đã dành một giờ fussing với những điều trước khi tôi nhận ra đây là vấn đề đối với tôi là tốt. – Jared

+2

Có lẽ Android Studio sẽ chú trọng hơn trong việc nhận ra loại sự cố này ... –

0

Nếu sử dụng Xamarin Droid cách dễ nhất để làm điều này là để đánh dấu sự lớp như một dịch vụ như thế này:

[Service] 
public class LongRunningTaskService : Service 
{ 
    ... 
} 

Sau đó không cần phải đặt nó trong AndroidManifest.xml.

Các vấn đề liên quan