onNewIntent () জীবনচক্র এবং নিবন্ধিত শ্রোতাদের


150

আমি সার্চ-ডায়ালগের মাধ্যমে অভিপ্রায় গ্রহণ করতে একটি একক শীর্ষ কার্যকলাপ ব্যবহার করছি onNewIntent()

যা আমি লক্ষ্য করেছি তা onPause()হ'ল আগে বলা হয়েছিল onNewIntent()এবং তারপরে এটি কল করে onResume()। দৃশ্যরূপে:

  • অনুসন্ধান সংলাপ শুরু হয়েছে
  • অনুসন্ধান অভিপ্রায় ক্রিয়াকলাপ থেকে বরখাস্ত
  • onPause()
  • onNewIntent()
  • onResume()

সমস্যাটি হ'ল আমার কাছে শ্রোতাদের নিবন্ধভুক্ত রয়েছে onResume()যা সরিয়ে ফেলা হবে onPause()তবে তাদের onNewIntent()কলটির অভ্যন্তরে প্রয়োজনীয় । এই শ্রোতাদের উপলব্ধ করার কি কোনও স্ট্যান্ডার্ড উপায় আছে?

উত্তর:


294

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

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    // getIntent() should always return the most recent
    setIntent(intent);
}

সমস্ত সেটআপ যুক্তি onResume()ব্যবহার করে ঘটছে getIntent()


@Rodja আপনি এই মন্তব্য খুশী করবে stackoverflow.com/questions/19092631/... এছাড়াও
বিকাশকারী

3
মূল প্রশ্নের সাথে সম্পর্কিত: মনে রাখবেন আপনি যদি কোডটিকে সন্ধানের Intentমধ্যে পরিচালনা করতে যান তবে onResume()আপনার ক্রিয়াকলাপ সম্ভবত যতবার অনুসন্ধান শুরু হবে ততবার অনুসন্ধান চালানোর চেষ্টা করবে, সম্ভবত আপনি যে আচরণ চান তা নয়।
টনি চ্যান

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

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

গুরুত্বপূর্ণ লক্ষণীয় বিষয় হ'ল getIntent () এখনও মূল উদ্দেশ্যটি ফেরত দেয়। নতুন ইন্টেন্টে আপডেট করতে আপনি setIntent (ইন্টেন্ট) ব্যবহার করতে পারেন।
লিনাক্সজভা 21

15

দ্রষ্টব্য: অন্য একটি থেকে একটি জীবনচক্র পদ্ধতি কল করা ভাল অনুশীলন নয়। নীচের উদাহরণে আমি এটি অর্জনের চেষ্টা করেছি যে আপনার কার্যকলাপের ধরণ নির্বিশেষে আপনার অন-নিউটেন্টকে সর্বদা বলা হবে।

অননিউইন্টেন্ট () প্রথমবারের মতো ক্রিয়াকলাপটি তৈরি করা ব্যতীত সর্বদা সিঙ্গলটপ / টাস্ক ক্রিয়াকলাপের জন্য কল করুন। এই সময়ে অনক্রিটকে এই থ্রেডে জিজ্ঞাসিত কয়েকটি প্রশ্নের সমাধানের জন্য সরবরাহ সরবরাহ বলা হয়।

আপনি এটি সর্বদা অনক্রিট পদ্ধতিতে রেখে নতুন তথ্যতে আবেদন করতে পারেন

@Override
public void onCreate(Bundle savedState){
    super.onCreate(savedState);
    onNewIntent(getIntent());
}

@Override
protected void onNewIntent(Intent intent) {
  super.onNewIntent(intent);
  //code
}

59
সাধারণত লাইফসাইকেল পদ্ধতিগুলি সরাসরি কল করা ভাল ধারণা নয়, না? হতে পারে নিরীহ, বা অন-নিউটেন্ট () এর কিছু বেস বাস্তবায়ন ধরে নেওয়া যায় যে ইতিমধ্যে অনপজ () বলা হয়েছে? উভয় স্থান থেকে কলযোগ্য পদ্ধতিতে অ্যাপ কোডটি এনক্যাপুলেট করা সম্ভবত নিরাপদ।
বার্নালকেসি 12'15

12
একমত। আমরা এই পদ্ধতির ব্যবহার করে কয়েকটি কিনারায় পড়েছি। সেরা এড়ানো।
সাদ ফারুক

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