لا تعمل خدمة الخدمات داخل زر ، ولكن يعمل في onCreate - Android
سؤال
لدي خدمة محلية بسيطة للغاية أحاول ربطها بنشطتي. لقد عملت خلال هذا أمس مع Commonsware وأخرجني حيث كنت أواجه صعوبة في الحصول على الخدمة لربطها. اتضح أن السبب في أنني كنت أواجه الكثير من المتاعب هو أنني كنت أحاول ربط الخدمة بـ:
bindService(new Intent(this, myService.class), mConnection, Context.BIND_AUTO_CREATE);
داخل طريقة الفراغ التي تم استدعاؤها بعد نقرة زر.
private void doBindService() {
bindService(new Intent(this, SimpleService.class), mConnection, Context.BIND_AUTO_CREATE);
mIsBound = true;
}
private OnClickListener startListener = new OnClickListener() {
public void onClick(View v){
doBindService();
}
};
عندما قمت بنقل مكالمة BindService () إلى طريقة OnCreate للنشاط ، فإنها تعمل بشكل جيد. ذكرت Commonsware شيئًا ما عن تلك الدعوة كونها غير متزامنة ولا أعرف ما يكفي عن إنشاء نشاط Android لمعرفة ما إذا كان هذا هو ما كانت مشكلتي أم لا. أعلم أن onServiceConnection () كان يتم استدعاؤه داخل ServiceConnection () عندما يتم النقر على الزر ، لن يعمل MboundService الخاص بي عندما حاولت الوصول إلى الأعضاء داخل الخدمة.
هل يمكن لأحد أن يخبرني لماذا لا يعمل داخل الزر ، لكن هل يعمل داخل OnCreate ()؟
تيا
المحلول
ال this
إشارة داخل doBindService
ليس هو نفسه في كلتا الحالتين. إذا استدعت في onCreate
سيكون إشارة إلى Activity
إذا تم استدعاؤه من الزر ، فسيكون ذلك مرجعًا إلى OnClickListener
. من الواضح أنك لا تريد أن تكون خدمتك ملزمة للمستمع انقر فوق الأزرار.
حاول التغيير this
ل YOURACTIVITYNAME.this
ومعرفة ما إذا كان ذلك يساعد.