যে কারণে পাস করা ইনটেন্টটি অন স্টার্টকমান্ডে শূন্য হবে


100

onStartCommand(Intent, int, int)সিস্টেমটি যেমন একটি পতাকা মাধ্যমে পরিষেবা পুনরায় আরম্ভ করার পাশাপাশি যে ইন্টেন্টটি পাস করা হয়েছে তা ন্যূনএল হবে START_STICKY?

এছাড়াও, যখন সিস্টেমটি দ্বারা পরিষেবাটি পুনরায় চালু করা হয় তখন Intent.getAction()পদ্ধতিটি NUL ফেরত দেয় ... কখনও কখনও। উদ্দেশ্য কেবল নুল নয় ULgetAction()

আমি এখানেও জিজ্ঞাসা করেছি কিন্তু এখনও কোনও উত্তর পাইনি।

আপডেট : মার্ক মারফি সাথে চ্যাট করার পর তিনি প্রস্তাব করেন যে আমি আসতে START_REDELIVER_INTENTমধ্যে onStartCommand()কলব্যাক আমার পরিষেবাতে পরিবর্তে START_STICKYযাতে সমগ্র অভিপ্রায় একটি সিস্টেম আরম্ভ করার নিম্নলিখিত পাঠানো হয়।

আমি প্রাথমিকভাবে এটি করিনি কারণ আমি উদ্বিগ্ন ছিল যে পরিষেবাটি যদি কিছু করার চেষ্টা করে, তবে সেই কিছুর মাঝখানে পরিষেবাটি আবার চালু করা হয়েছিল ... এটি কি বুঝতে পারে যে এটি এমন কিছু করা শুরু করেছিল? আমি অনুমান করি যে যুক্তিযুক্ত আমি এর জন্য দায়ী হতে হবে :)


16
উত্তরের সাথে আপনার প্রশ্নটি সম্পাদনা করার পরিবর্তে, দয়া করে একটি উত্তর যুক্ত করুন এবং তা স্বীকার করুন যাতে আপনার প্রশ্নটি উত্তর না দেওয়া প্রশ্নের সেটে দেখা বন্ধ হয়ে যায় - ধন্যবাদ।
ডেল উইলসন

4
অনুরূপ সমস্যাযুক্ত কারও জন্য কেবল একটি নোট। আমি দেখেছি যে সাধারণত যখন আমি ভ্রান্ত যে পেতে intentহয় nullউপর onStartCommand(), এটা অন্য কিছু ত্রুটি ঘটেছে, যা Logcat দৃশ্যমান আগে সৃষ্টি হয়। আমি জানি না কেন, তবে এটি আমি পর্যবেক্ষণ করেছি এবং এটি উপেক্ষা করা বেশ সহজ।
পাইওটর চজনাকী

4
পছন্দ করুন যতক্ষণ আমি কোনও ইন্টেন্ট নাল কেন বা START_REDELIVER_INTENT ব্যবহার না করেই কীভাবে নালাগুলি এড়ানো যায় সে সম্পর্কে একটি সুনির্দিষ্ট উত্তর না পাওয়া পর্যন্ত (যা আমি পরে শিখেছি, আমার যা প্রয়োজন তা নয় তবে এখনও কিছু লোকের সমস্যা সমাধান করবে এভাবে আমি আমার সম্পাদনা ছেড়ে দিয়েছি) আমি একটি উত্তর গ্রহণ করতে পারি না।
rf43

@ মোসকুইটো কি লক্ষ্য করেছেন যে, বিশেষত, কোন ত্রুটি ছুঁড়েছে?
rf43

4
@ ডিডোস্যাটাক আসলেই কিছু যায় আসে না। আমার ক্ষেত্রে এটি NullPointerExceptionক্রিয়াকলাপগুলির মধ্যে কোথাও উদাহরণস্বরূপ ছিল । পরে এটি অন্য কিছু ত্রুটি ছিল। তবে উভয় ক্ষেত্রেই আমার স্ট্যাক ট্রেসটি দেখিয়েছিল যে আমার পরিষেবা - যা এই ত্রুটিটি হওয়ার সময় চলছিল - intentএটি ছিল nullআপনার ক্ষেত্রে যেমন ছিল । আমি বেশ দীর্ঘকাল কী ভেবেছিলাম তা ভাবছিলাম, যখন আমি স্ট্যাকের সন্ধানটি স্ক্রোল করার সিদ্ধান্ত নিয়েছিলাম এবং এটি প্রদর্শিত হয়েছিল যে শীর্ষে আমার কোথাও আমার সত্যিকারের ত্রুটি ছিল। এটিকে সমাধান করার পরে, একটিও null intentঅদৃশ্য হয়ে গেল।
পাইওটর চজনাকী

উত্তর:


51

আমি আশ্চর্য হয়েছি যে আগত পতাকাগুলির কোনও আলোচনা নেই। নিম্নলিখিতগুলির সাথে লগগুলিতে আমি এটি পর্যবেক্ষণ করতে যাচ্ছি:

if (null == intent || null == intent.getAction ()) {
        String source = null == intent ? "intent" : "action";
        Log.e (TAG, source + " was null, flags=" + flags + " bits=" + Integer.toBinaryString (flags));
        return START_STICKY;
}

আপডেট: পতাকাগুলি 0 ছিল তাই সেখানে কার্যকর কার্যকর কিছুই ছিল না। আমি কোনও কার্যকারিতা হ্রাস না করে নাল চেকটি সেখানে রেখেছি।

সম্পাদনা: ঠিক আছে, আমি এটি সমস্ত জায়গার START_STICKY এর ডকুমেন্টেশনে পেয়েছি! "যদি পরিষেবাতে বিতরণ করার জন্য কোনও মুলতুবি সূচনা কমান্ড না থাকে, তবে এটি একটি নাল উদ্দেশ্য সাথে ডাকা হবে, সুতরাং আপনার এটি পরীক্ষা করার জন্য অবশ্যই যত্ন নেওয়া উচিত।"

http://developer.android.com/references/android/app/Service.html


7
কোটলিনে অভিপ্রায়টি নোড হিসাবে চিহ্নিত হয়েছে এবং এটি অ্যাপটি ক্র্যাশ করেছেoverride fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {}
মুহাম্মদ নাদেরি

@ মুহাম্মাদনাডেরি আপনি কেবলমাত্র উদ্দেশ্যটি তৈরি করতে পারেন Intent?। আমার জন্য কাজ করেছেন। তবে অবশ্যই আপনাকে নাল অভিপ্রায়টি সঠিকভাবে পরিচালনা করতে হবে।
প্যাট্রিক বুস

@ পেট্রিকবুস But then of course you need to correctly handle null intent; আপনি কি বোঝাতে চেয়েছেন?! কীভাবে? ধন্যবাদ
ডাঃ জ্যাকি

আমি বোঝাতে চাইছি আপনার কোডটিতে এটি onStartCommand(intent: Intent?, ...)কাজ করা উচিত। এবং তারপরে কেবল এটি করবেন না intent!!তবে সঠিকভাবে পরীক্ষা করে নিন যে অভিপ্রায়টি শূন্য।
প্যাট্রিক বুস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.