Доступ к моим собственным методам обслуживания из Activity - PullRequest
1 голос
/ 16 июня 2011

У меня есть метод в сервисе, который я создал, и я хочу получить доступ к этому методу из действия, которое реализует диалог прогресса.Этот метод просто обновляет мою базу данных, и он возвращал проблему ANR, поэтому я создал поток, и в этом потоке я хочу вызвать этот метод, который находится в моей службе.Я попытался создать экземпляр службы, но объект имеет значение null

Итак, как создать «объект» в моей деятельности, где я могу получить доступ к этому методу.Кто-то может помочь мне с этой реализацией ??

Спасибо.

Код:

public class UpdateDBProgressDialog extends Activity {

    private String LOG_TAG = "UpdateDBProgressDialog";
    private TextView tv;
    private ProgressDialog pd;
    private Handler handler;
    private RatedCallsService rcs;
    private Intent intent;
    public boolean mIsBound = false;    

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);  
        pd = ProgressDialog.show(this, "Updating Database", "The application is updating the database. Please wait.", true, false);


        handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                pd.dismiss();       
            }
        };

        Thread thread = new Thread(){

            public void run() {

                try{                                    
                    rcs.updateDB();// Here I'm trying to call the method that is from the service class. But it says 'rcs' is null.         
                    handler.sendEmptyMessage(0);

                }catch(Exception e){e.printStackTrace();}
            }
        };
        thread.start(); 


        new Thread(){

            public void run(){

            try{

                Thread.sleep(10000);

                if(!RatedCallsService.RUNNING){

                    Intent i = new Intent(UpdateDBProgressDialog.this, RatedCallsService.class);
                    UpdateDBProgressDialog.this.startService(i);
                }

            }catch(Exception e){e.printStackTrace();}

        }}.start();
    }
}

Я просто хочу объектслужба, чтобы я мог вызвать метод, который я создал там.

Ответы [ 2 ]

2 голосов
/ 20 мая 2015

Когда вы запускаете или привязываете Службу к ее вызовам метода onCreate , и всякий раз, когда вы запускаете / привязываете ее снова, вызывается ее метод onStartCommand .Потому что сервис уже создан.

 @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        String action = intent.getAction();
        if (action.equals(ACTION_PLAY)) // where ACTION_PLAY="any.unique.name.play"
            processPlayRequest();
        else if (action.equals(ACTION_PAUSE)) // where ACTION_PAUSE="any.unique.name.pause"
            processPauseRequest();
        else if (action.equals(ACTION_SKIP))
            processSkipRequest();
        else if (action.equals(ACTION_STOP))
            processStopRequest();
        else if (action.equals(ACTION_REWIND))
            processRewindRequest();
        else if (action.equals(ACTION_URL))
            processAddRequest(intent);

        return START_NOT_STICKY; // Means we started the service, but don't want
                                 // it to
                                 // restart in case it's killed.
    }

И назовите его как:

Intent serviceIntent = new Intent(this, ServiceToStart.class);
serviceIntent.setAction("any.unique.name.play"); // onClick of play button
startService(serviceIntent);
0 голосов
/ 16 июня 2011

Если вы хотите вызвать операцию в Сервисе из Действия, есть два варианта. Одним из них является создание Intent с любым набором данных в качестве дополнений в Intent, а затем запуск службы, как в коде. Затем в onStartCommand службы вытащите дополнительные функции и вызовите соответствующий метод в вашей службе. Для этой опции вы, вероятно, захотите использовать IntentService . Другой вариант - привязать к Сервису и напрямую вызывать методы для него. Для этого вам нужно будет объявить операции вашей службы с помощью AIDL. Подробности смотрите в документации API к Сервису .

...