বন্ধ / স্থগিত করা হলে উল্লেখযোগ্য পরিবর্তনের অবস্থানের API এর আচরণ?


108

এটি স্টার্টমনিটরিংসিগনিফ্যান্টলোকেশনচেনজগুলি সহ অ্যাপ্লিকেশন আচরণের বর্ণনা দেয় CLLocationManager ডকুমেন্টেশন থেকে বিভাগটি :

আপনি যদি এই পরিষেবাটি শুরু করেন এবং পরে আপনার অ্যাপ্লিকেশনটি সমাপ্ত হয়, কোনও নতুন ইভেন্ট উপস্থিত হলে সিস্টেম স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশনটিকে পটভূমিতে পুনরায় চালু করে। এই জাতীয় ক্ষেত্রে অ্যাপ্লিকেশনগুলিতে অপশন অভিধানটি পাস হয়েছে: didFinishLaunchingWithOptions: আপনার অ্যাপ্লিকেশন প্রতিনিধি পদ্ধতিতে আপনার অ্যাপ্লিকেশনটি কোনও ইভেন্ট ইভেন্টের কারণে চালু হয়েছিল তা বোঝাতে কী UiapplicationLaunchOptionsLocationKey রয়েছে। পুনরায় লঞ্চের পরে, আপনাকে অবশ্যই অবস্থানের পরিচালকটি অবজেক্টটি কনফিগার করতে হবে এবং অবস্থানের ইভেন্টগুলি গ্রহণ চালিয়ে যেতে এই পদ্ধতিতে কল করতে হবে। আপনি যখন অবস্থান পরিষেবাগুলি পুনরায় চালু করবেন, বর্তমান ইভেন্টটি আপনার প্রতিনিধিদের সাথে সাথেই সরবরাহ করা হবে delivered এছাড়াও, আপনি অবস্থান পরিষেবাগুলি শুরু করার আগেই আপনার অবস্থান ব্যবস্থাপক অবজেক্টের অবস্থানের সর্বাধিক সাম্প্রতিক অবস্থান অবজেক্টের সাথে পপুলেশন।

সুতরাং আমার বোধগম্যতা হল যদি আপনার অ্যাপ্লিকেশনটি বন্ধ হয়ে যায় (এবং আমি ধরে নিই যে আপনি যদি অ্যাপ্লিকেশন উইলটার্মিনেট থেকে স্টপমনিটরিংসিগনিফ্যান্টলোকেশন পরিবর্তনগুলি না কল করেন ) আপনি একটি ইউআইএপ্লিকেশনল্যাঞ্চঅপশনসলোকেশনকি প্যারামিটার দিয়ে অ্যাপ্লিকেশনটিতে জেগে উঠবেন : didFinishLaunchingWithOptions । এই মুহুর্তে আপনি আপনার CLLocationManager তৈরি করেন , startMon भयोSignificantLocationChanges কল করুন এবং সীমিত সময়ের জন্য আপনার পটভূমি অবস্থান প্রক্রিয়াজাতকরণ করুন । সুতরাং আমি এই বিট সঙ্গে ভাল।

পূর্ববর্তী অনুচ্ছেদে কেবল অ্যাপটি বন্ধ হয়ে গেলে কী ঘটে তা নিয়ে আলোচনা করা হয়, অ্যাপ্লিকেশনটি সাসপেন্ড হয়ে গেলে আপনি কী করবেন তা প্রস্তাব দেয় না। ফিনিশ লঞ্চিং উইথঅ্যাপশনগুলির জন্য ডকুমেন্টেশনটি বলে:

অ্যাপ্লিকেশনটি পটভূমিতে অবস্থানের আপডেটগুলি ট্র্যাক করে, শুদ্ধ করে দেওয়া হয়েছিল এবং এখন তা আবার চালু করা হয়েছে। এই ক্ষেত্রে অভিধানে একটি কী রয়েছে যা ইঙ্গিত করে যে কোনও নতুন অবস্থানের ইভেন্টের কারণে অ্যাপ্লিকেশনটি আবার চালু হয়েছিল।

পরামর্শ দেওয়া হচ্ছে যে আপনি যখন আপনার অ্যাপ্লিকেশনটি চালু করা হবে (অবস্থান পরিবর্তনের কারণে) তখনই আপনি এই কলটি গ্রহণ করবেন ated

তবে উপর অনুচ্ছেদ উল্লেখযোগ্য পরিবর্তন পরিষেবা মধ্যে অবস্থান সচেতনতা প্রোগ্রামিং গাইড বলতে অনুসরণ করেনি:

যদি আপনি এই পরিষেবাটি চালু রেখে চলে যান এবং আপনার অ্যাপ্লিকেশন পরবর্তী সময়ে স্থগিত বা বন্ধ হয়ে যায়, নতুন অবস্থানের ডেটা উপস্থিত হলে পরিষেবাটি স্বয়ংক্রিয়ভাবে আপনার অ্যাপ্লিকেশনটি জাগ্রত করে। জাগ্রত সময়ে, আপনার অ্যাপ্লিকেশনটিকে পটভূমিতে রাখা হবে এবং অবস্থানের ডেটা প্রক্রিয়া করার জন্য অল্প পরিমাণ সময় দেওয়া হবে। আপনার অ্যাপ্লিকেশনটি ব্যাকগ্রাউন্ডে থাকার কারণে, এটি ন্যূনতম কাজ করা উচিত এবং কোনও কাজ এড়ানো উচিত (যেমন নেটওয়ার্কটি জিজ্ঞাসা করা) যা বরাদ্দ সময় শেষ হওয়ার আগে এটি ফিরে আসতে বাধা দিতে পারে। যদি তা না হয় তবে আপনার অ্যাপ্লিকেশনটি সমাপ্ত হতে পারে।

এটি আপনাকে অ্যাপ্লিকেশন স্থগিত করা থাকলে অবস্থানের ডেটা দিয়ে জাগ্রত হওয়ার পরামর্শ দেয় তবে আপনি কীভাবে জাগ্রত তা উল্লেখ করতে ব্যর্থ হন:

এটি লেখার প্রক্রিয়ায়, আমি মনে করি আমি কেবল আমার নিজের প্রশ্নের উত্তর দিয়েছি, তবে আরও জ্ঞানী কেউ এটি দ্বারা নিশ্চিত হওয়া সম্পর্কে আমার বোঝা ভাল লাগবে।

উত্তর:


80

যেহেতু আমি এই প্রশ্নটি জিজ্ঞাসা করেছি, আমি বেশিরভাগ পরীক্ষা করেছি (বেশিরভাগ বাড়ি এবং কাজের মাঝামাঝি ট্রেনে) এবং নিশ্চিত করেছি যে স্থগিত হওয়া অ্যাপ্লিকেশনগুলির জন্য আচরণটি প্রশ্নের শেষের দিকে যেমন সন্দেহ হয়েছিল।

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

[UIApplication sharedApplication].applicationState == UIApplicationStateBackground

আমি লোকেশন টেস্টের সুরক্ষার সাথে এই সিদ্ধান্তে পৌঁছেছি যে আপনি ডাউনলোড করে দেখে চেষ্টা করে স্বাগত । এটি একটি দুর্দান্ত সরল অ্যাপ্লিকেশন যা আপনাকে ইউআই এর মাধ্যমে উল্লেখযোগ্য পরিবর্তন এবং জিপিএস পরিবর্তন এপিআই চালু করতে এবং আপনি ফিরে পাওয়া সমস্ত প্রতিক্রিয়া লগ করতে দেয়।

পূর্বের উত্তরের এনবি পয়েন্ট সিক্সটি সঠিক নয়। শুকনো স্থগিত অ্যাপ্লিকেশনগুলি স্থগিত অবস্থা থেকে জাগ্রত হলে CLLocationManagerDelegate কলব্যাকগুলি পান ।


1
লোকদের বিভ্রান্ত না করার জন্য আমার উত্তরে # 6 প্রকাশিত হয়েছে।
অ্যারন

হাস্যকরভাবে, উল্লেখযোগ্য পরিবর্তনের জন্য বিকাশ করার সময় আমিও একই বিভ্রান্তি অনুভব করেছি। অ্যাপটি বন্ধ থাকলে কী হয় তা নিয়ে আমার এখনও কিছুটা সংশয় রয়েছে। ইউআইএপ্লিকেশনডেলিগেট কলব্যাক কি হবে না? এটিই অ্যাপটি শুরু করার সঠিক উপায়। যদি লোকেশন ম্যানেজারটিকে এখনও বরখাস্ত করা হয়নি, এটি কীভাবে পটভূমিতে বিজ্ঞপ্তি পেতে পারে? (আরও কিছু আর অ্যান্ড ডি এর জন্য সময়)
দর্শনসনদে

নমুনা অ্যাপ্লিকেশনটির জন্য অনেক ধন্যবাদ, এটি আমার পক্ষে খুব কার্যকর ছিল। আমার একটি প্রশ্ন আছে: আমি যদি ব্যাকগ্রাউন্ডে স্ট্যান্ডার্ড লোকেশন পরিষেবাটি ব্যবহার করতাম, তাৎপর্যপূর্ণ না, তবে অ্যাপটিও কি সেই ক্ষেত্রে সমাপ্তির পরে পুনরায় চালু করা হবে? আমি বিস্তারিতভাবে এখানে এই প্রশ্ন জিজ্ঞাসা, আমি যদি তুমি আমাকে আপ হালকা পারে খুশি হবেন:] stackoverflow.com/questions/12239967/...
aslisabanci


আপনি কি জানেন যে আপনার অ্যাপ্লিকেশনটি সমাপ্ত হতে কতক্ষণ সময় লেগেছে? এবং তার পরিবর্তে একটি অ্যাপডিজিট কলব্যাক পাবেন? (এটি কি 30 মিনিটের মতো? 2 ঘন্টা? 5 ঘন্টা?) আমি এটি জিজ্ঞাসা করার কারণটি কারণ আমি পর্যবেক্ষণের জন্য একটি অঞ্চল স্থাপন করেছি। আমার অ্যাপ্লিকেশনটি চালু হচ্ছে তা দেখার জন্য বহুবার চেষ্টা করেছিলেন তবে কেবল একবার অ্যাপটি পুনরায় চালু করতে পেলাম। অন্যান্য বার didExitRegionকলব্যাক করলেও আমি startLocationUpdatesসেখান থেকে সক্ষম হয়ে উঠিনি কারণ এটি অ্যাপ্লিকেশন লঞ্চের মাধ্যমে হয়নি ...
হানি

25

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

  1. আপনার অ্যাপ্লিকেশনটি প্রথমবারের জন্য পরিচালিত হয়, আপনি শুরুমনিটরিংসিগনিফিকাল লোকেশনচেন্জে নিবন্ধন করুন এবং কলব্যাক ফাংশন সরবরাহ করুন। আপনার অ্যাপ্লিকেশন চলাকালীন, এটি যখনই কোনও উল্লেখযোগ্য পরিবর্তন আসে তখনই এটি কলব্যাক করবে।
  2. যদি আপনার অ্যাপ্লিকেশনটিকে ব্যাকগ্রাউন্ডে রেখে দেওয়া হয়, ইউআইএপ্লিকেশনটি অ্যাপ্লিকেশন উইলরেইসনএ্যাকটিভ পাবেন , তারপরে অ্যাপ্লিকেশনডইনটারব্যাকগ্রাউন্ড পাবেন
  3. যদি আপনার অ্যাপ্লিকেশনটি ব্যাকগ্রাউন্ডে স্থগিতের সময় হত্যা করা হয় তবে আপনাকে অবহিত করা হবে না; তবে, যদি আপনার অ্যাপ্লিকেশনটি চলমান অবস্থায় নিহত হয় (আমার জ্ঞানের অগ্রভাগ বা ব্যাকগ্রাউন্ড), আপনি অ্যাপ্লিকেশনওয়ালটর্মিনেটের সাথে একটি মুহুর্ত পাবেন । আপনি এই ফাংশন থেকে অতিরিক্ত পটভূমি সময় অনুরোধ করতে পারবেন না।
  4. ব্যাকগ্রাউন্ডে নিহত হওয়া সত্ত্বেও, ওএস আপনার অ্যাপ্লিকেশনটি পুনরায় চালু করবে। যদি আপনার অ্যাপ্লিকেশনটি কোনও ওএস দ্বারা পরিবর্তনের জন্য সহজভাবে চালু করা হয়, আপনি অ্যাপ্লিকেশনটিতে কল পাবেন ফিনিশলঞ্চিং উইথঅপশনগুলি :

    if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey])

    আপনি কোনও পটভূমির অবস্থান পরিবর্তন থেকে ফিরে এসেছেন কিনা তা নির্ধারণে আপনাকে সহায়তা করবে।

  5. পরিবর্তে, আপনি বর্তমানে ব্যাকগ্রাউন্ডে চলছেন এবং আপনার অ্যাপ্লিকেশনটি ম্যানুয়ালি ব্যবহারকারী দ্বারা পুনরায় চালু করা হয়েছে, আপনি একটি অ্যাপ্লিকেশন উইলইন্টারফোরগ্রাউন্ড পাবেন যার পরে অ্যাপ্লিকেশনডিডকোমেকটিভ পাবেন
  6. এটি কীভাবে ঘটেছিল তা বিবেচনা না করেই, যখন আপনার অ্যাপ্লিকেশনটি পুনরায় চালু করা হয় (যদি না এটি পটভূমির কোনও কার্যের ফলে পটভূমিতে চলতে থাকে এবং না বলে যে টাস্ক পরিবর্তনগুলি পর্যবেক্ষণ শুরু করে) তবে আপনাকে স্পষ্টভাবে এটি শুরু করতে বলা উচিতমনিটরিংসিগনিগ্যান্ট লোকেশনচেন্জগুলি কারণ কলব্যাকটি নেই "ফ্রিজ শুকিয়ে যাওয়ার" পরে আর সংযুক্ত থাকে। এবং হ্যাঁ, আপনাকে একবার স্থগিত অবস্থা থেকে ফিরে এসে কোনও ধরণের লোকেশন হ্যান্ডলারটি পুনরায় সংযুক্ত করে ডুডআপডেটলকেশনে কোড প্রয়োগ করতে হবে।

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

ওহ, এবং যদি দুর্ভাগ্যের কারণে কিছুটা আঘাত হয় তবে আপনি এমন একটি অ্যাপ্লিকেশন প্রকাশ করুন যা আমি যা করতে চাই তা করে, আমি কাঁদতে পারি :)

শুভকামনা!


1
@ টিগারিল +1 উত্তরের জন্য ধন্যবাদ। আমি এটির উপর ক্রিকট শুনতে শুরু করছিলাম। :) আমি অবাক হয়েছি যে অ্যাপ্লিকেশনগুলি স্থগিত হওয়া থেকে শুরু করে পুনরায় কল করা শুরু করা উচিতমনিটরিংসিগনিগ্যান্টল লোকেশনচ্যান্সগুলি। ডকোতে যেখানে এটি বর্ণিত হয়েছে সেখানে আপনার কোনও লিঙ্ক আছে? আমার বোধগম্যতা ছিল যে অ্যাপ্লিকেশনটি সাসপেন্ড করা অবস্থায় স্থগিত অবস্থা থেকে লোড করা আপনার সমস্ত বস্তু ততক্ষণে ততক্ষণ করে তুলবে। সুতরাং আমি উল্লেখযোগ্য পরিবর্তন অনুরোধ কার্যকর হবে আশা করব।
রেড ব্লুথিং

আপনি এই সম্পর্কে কথা হতে পারে? "পুনরায় লঞ্চের পরে, আপনাকে অবশ্যই কোনও অবস্থান ব্যবস্থাপক অবজেক্টটি কনফিগার করতে হবে এবং অবস্থানের ইভেন্টগুলি পেতে চালিয়ে যেতে এই পদ্ধতিটি কল করতে হবে" তবে আমি মনে করি এটি আপনার কে অ্যাপটি একটি সমাপ্ত অবস্থা থেকে (কোনও অবস্থানের ইভেন্টের দ্বারা) চালু করে সেই ক্ষেত্রে উল্লেখ করছে। এটি মূলত আমার প্রশ্নের মূল, 'স্থগিত হওয়া মামলার কি হবে?'
রেড ব্লুথিং

দেব ফোরামগুলিতে মরগান গ্রেনার এটি পরামর্শ দিয়েছিল: "আপনার অ্যাপ্লিকেশন চালু হওয়ার সময় আপনাকে একটি CLLocationManager তৈরি করতে হবে, একটি প্রতিনিধি স্থাপন করতে হবে এবং স্টার্টমনিটরিংসিগ্যালিফ্যান্ট লোকেশনচেন্জগুলি কল করতে হবে, অন্যথায় কোর লোকেশন আপডেটগুলি সরবরাহ করার মতো কোথাও থাকবে না।" একটি সমাপ্ত বা স্থগিত অবস্থা থেকে নির্বিশেষে কোনও অ্যাপ্লিকেশন পুনরায় চালু করার প্রসঙ্গে। থেকে "অ্যাপ্লিকেশনটি পুনরায় চালু করা হয়েছিল স্টার্টমনিটরিংসিগনিফ্যান্টল লোকেশনচ্যাঞ্জেস এবং এখন কী?"
হারুন

আমি সম্মত হই যে এই ফোরামের পোস্টের প্রসঙ্গে এমনকি পোস্টারটি এখনও অস্পষ্ট হতে পারে (পোস্টারটি পটভূমি থেকে জাগ্রত করার বিষয়ে আলোচনা করছিল, তবে মরগান আরও একটি অ্যাপ্লিকেশন পুনরায় আরম্ভ করার জন্য আরও সাধারণ ব্যবহার করেছে)। আমি এখনও মনে করি আপনি গুরুত্বপূর্ণ পরিবর্তনগুলির ফাংশনটি নিয়ে কাজ করতে চাইলে আপনার অ্যাপ্লিকেশনটি পুনরায় চালু হয়ে গেলে আপনাকে আবার মনিটরিং করার জন্য কল করতে হবে। আপনি যদি পরিবর্তে একটি ব্যাকগ্রাউন্ড টাস্ক চালু করতে চান এবং মান অবস্থানের পরিষেবা এবং জিপিএস কার্যকারিতা সহ আপডেট করতে চান তবে এটি বিকল্প বিকল্প। আমি বিশ্বাস করি না যদিও আপনাকে আবার চালু করার জন্য উল্লেখযোগ্য পরিবর্তন সহ প্রতিটি লঞ্চে নিবন্ধন করতে হবে।
হারুন

1
আমি আনন্দের সাথে এর থেকে নির্দিষ্ট কিছু বেরিয়ে এসেছিল, ভবিষ্যতে আমাকে সহায়তা করা উচিত :)
অ্যারন

1

লোকেশন পরিবর্তনের ফলে অ্যাপ্লিকেশনটি স্থগিত অবস্থা থেকে সরিয়ে দেওয়া হলে পটভূমি অবস্থায় অ্যাপ্লিকেশন চালু হবে।

সমস্ত বস্তু লাইভ হবে এবং আপনি বিদ্যমান প্রতিনিধিতে অবস্থান আপডেট পাবেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.