2016-01-28 2 views
0

Я действительно младший разработчик Android и делаю некоторые практики по обслуживанию прямо сейчас. Но при выполнении этой практики возникают некоторые проблемы.Служба (android) не может быть запущена

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    getWidget(); 
    registerListener(); 

} 

public void getWidget() 
{ 
    startService = (Button) findViewById(R.id.startService); 
    shutdownService = (Button) findViewById(R.id.shutdownService); 
} 

public void registerListener() 
{ 
    ButtonListener bl = new ButtonListener(); 
    startService.setOnClickListener(bl); 
    shutdownService.setOnClickListener(bl); 
} 
class ButtonListener implements View.OnClickListener 
{ 

    @Override 
    public void onClick(View v) { 

     Intent intent = null; 
     switch(v.getId()) 
     { 
      case R.id.startService: 
       intent = new Intent(MainActivity.this,CountService.class); 
       startService(intent); 
       Log.v(TAG,"start service"); 
       break; 
      case R.id.shutdownService: 
       intent = new Intent(MainActivity.this,CountService.class); 
       stopService(intent); 
       Log.v(TAG,"stop service"); 
       break; 

общественного класса CountService расширяет службы {

boolean threadDisable ; 
int count; 

public IBinder onBind(Intent intent){ 
    return null; 
} 
public void onCreate(){ 
    super.onCreate(); 
    /**New thread, count increased by 1 every 1s*/ 
    new Thread(new Runnable(){ 
     public void run(){ 
      while(!threadDisable){ 
       try{ 
        Thread.sleep(1000); 
       }catch(InterruptedException e){ 

       } 
       count++; 
       Log.v("CountService","Count is"+count); 
      } 
     } 
    }).start(); 
} 
public void onDestroy(){ 
    super.onDestroy(); 
    /**service ends*/ 
    this.threadDisable = true; 
} 
public int getConunt(){ 
    return count; 
} 
class ServiceBinder extends Binder{ 
    public CountService getService(){ 
     return CountService.this; 
    } 
} 

При нажатии на кнопку, служба не работает. Кто может мне помочь? Спасибо.

Благодарим за помощь Perroloco. Я забыл добавить разрешение на обслуживание в файлах mainfest.

<service android:name=".CountService"></service> 
+0

Привет, Алекс, что происходит, когда вы нажимаете кнопку? Установили ли вы контрольные точки и выполнили этот код в отладчике? – OYRM

ответ

1

Прежде всего, вам не нужны два экземпляра ButtonListener. Этого должно быть достаточно:

public void registerListener() 
{ 
    ButtonListener bl = new ButtonListener(); 
    startService.setOnClickListener(bl); 
    shutdownService.setOnClickListener(bl); 
} 

Кроме того, цель вы используете в обоих случаях одинакова, так:

class ButtonListener implements View.OnClickListener 
{ 

    @Override 
    public void onClick(View v) { 

     intent = new Intent(MainActivity.this,CountService.class); 
     switch(v.getId()) 
     { 
      case R.id.startService: 
       startService(intent); 
       Log.v(TAG,"start service"); 
       break; 
      case R.id.shutdownService: 
       stopService(intent); 
       Log.v(TAG,"stop service"); 
       break; 
... 

Теперь, я думаю, что ваш код правильно, по крайней мере, для запуска службы. Вы должны посмотреть на код своего сервиса. Я бы начал поток в методе onStartCommand, а не в onCreate. Кроме того, вы заявили о своем служении в манифесте?

+0

Благодарим вас за ответ. Я забываю объявить службу в манифесте. И ваш совет действительно отличный. Благодарю. –

+0

Пожалуйста, отредактируйте исходное сообщение, чтобы включить обнаруженное вами решение. – OYRM

+1

Решение обновлено –

Смежные вопросы