সাম্প্রতিক স্ক্রীন

সাম্প্রতিক স্ক্রীন, যাকে ওভারভিউ স্ক্রিন, সাম্প্রতিক টাস্ক লিস্ট, বা সাম্প্রতিক অ্যাপ স্ক্রীনও বলা হয়, এটি একটি সিস্টেম-স্তরের UI যা সম্প্রতি অ্যাক্সেস করা কার্যকলাপ এবং কাজগুলিকে তালিকাভুক্ত করে৷ ব্যবহারকারী তালিকার মধ্য দিয়ে নেভিগেট করতে পারেন, পুনরায় শুরু করার জন্য একটি টাস্ক নির্বাচন করতে পারেন, বা তালিকা থেকে একটি টাস্ক সোয়াইপ করে সরিয়ে ফেলতে পারেন।

সাম্প্রতিক স্ক্রীনটি একটি নথি-কেন্দ্রিক মডেল ব্যবহার করে — যা Android 5.0 (API স্তর 21)-এ প্রবর্তিত হয়েছে—যেটিতে বিভিন্ন নথি সমন্বিত একই কার্যকলাপের একাধিক দৃষ্টান্ত সাম্প্রতিক স্ক্রীনে কাজ হিসাবে উপস্থিত হতে পারে। উদাহরণস্বরূপ, Google ড্রাইভে একাধিক Google নথির প্রতিটির জন্য একটি কাজ থাকতে পারে। প্রতিটি নথি সাম্প্রতিক স্ক্রিনে একটি টাস্ক হিসাবে উপস্থিত হয়:

সাম্প্রতিক স্ক্রীন দুটি Google ড্রাইভ নথি দেখাচ্ছে, প্রতিটি একটি পৃথক কাজ হিসাবে উপস্থাপন করা হয়েছে।

আরেকটি সাধারণ উদাহরণ হল যখন ব্যবহারকারী তাদের ব্রাউজার ব্যবহার করে এবং তারা শেয়ার > Gmail এ ট্যাপ করে। জিমেইল অ্যাপের কম্পোজ স্ক্রীন দেখা যাচ্ছে। সেই সময়ে সাম্প্রতিক বোতামটি আলতো চাপলে ক্রোম এবং জিমেইল পৃথক কাজ হিসাবে চলমান প্রকাশ করে:

সাম্প্রতিক স্ক্রীনে Chrome এবং Gmail আলাদা আলাদা কাজ হিসেবে চলছে।

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

ActivityManager.AppTask ক্লাস আপনাকে কাজগুলি পরিচালনা করতে দেয় এবং Intent ক্লাসের অ্যাক্টিভিটি ফ্ল্যাগগুলি আপনাকে নির্দিষ্ট করতে দেয় যখন সাম্প্রতিক স্ক্রীন থেকে একটি কার্যকলাপ যুক্ত বা সরানো হবে। এছাড়াও, <activity> বৈশিষ্ট্যগুলি আপনাকে ম্যানিফেস্টে আচরণ সেট করতে দেয়।

সাম্প্রতিক স্ক্রিনে কাজ যোগ করুন

একটি টাস্ক যোগ করার জন্য Intent ক্লাসের ফ্ল্যাগগুলি ব্যবহার করা আপনাকে সাম্প্রতিক স্ক্রিনে কখন এবং কীভাবে একটি নথি খোলা বা পুনরায় খোলা হবে তার উপর আরও বেশি নিয়ন্ত্রণ দেয়৷ আপনি যখন <activity> বৈশিষ্ট্যগুলি ব্যবহার করেন, আপনি একটি নতুন টাস্কে নথিটি সর্বদা খোলার বা নথির জন্য বিদ্যমান একটি কার্য পুনরায় ব্যবহার করার মধ্যে নির্বাচন করতে পারেন৷

একটি টাস্ক যোগ করতে অভিপ্রায় পতাকা ব্যবহার করুন

আপনি যখন আপনার কার্যকলাপের জন্য একটি নতুন নথি তৈরি করেন, তখন আপনি startActivity() পদ্ধতিকে কল করেন, এটিকে উদ্দেশ্যটি প্রেরণ করে যা কার্যকলাপটি চালু করে। একটি যৌক্তিক বিরতি সন্নিবেশ করাতে যাতে সিস্টেমটি সাম্প্রতিক স্ক্রিনে আপনার কার্যকলাপকে একটি নতুন টাস্ক হিসাবে বিবেচনা করে, কার্যকলাপটি চালু করে এমন Intent addFlags() পদ্ধতিতে FLAG_ACTIVITY_NEW_DOCUMENT পতাকাটি পাস করুন৷

আপনি যদি নতুন নথি তৈরি করার সময় FLAG_ACTIVITY_MULTIPLE_TASK পতাকা সেট করেন, তাহলে সিস্টেমটি সর্বদা একটি নতুন টাস্ক তৈরি করে যার সাথে লক্ষ্য ক্রিয়াকলাপটি মূল হিসাবে থাকে৷ এই সেটিং একই ডকুমেন্টকে একাধিক টাস্কে খোলার অনুমতি দেয়। নিম্নলিখিত কোড দেখায় কিভাবে প্রধান কার্যকলাপ এটি করে:

কোটলিন

fun createNewDocument(view: View) {
    val newDocumentIntent = newDocumentIntent()
    if (useMultipleTasks) {
        newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
    }
    startActivity(newDocumentIntent)
}

private fun newDocumentIntent(): Intent =
        Intent(this, NewDocumentActivity::class.java).apply {
            addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT or
                    android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS)
            putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, documentCounter++)
        }

জাভা

public void createNewDocument(View view) {
      final Intent newDocumentIntent = newDocumentIntent();
      if (useMultipleTasks) {
          newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
      }
      startActivity(newDocumentIntent);
  }

  private Intent newDocumentIntent() {
      boolean useMultipleTasks = checkbox.isChecked();
      final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class);
      newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
      newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, documentCounter++);
      return newDocumentIntent;
  }

}

যখন মূল ক্রিয়াকলাপটি একটি নতুন কার্যকলাপ চালু করে, তখন সিস্টেমটি এমন একজনের জন্য বিদ্যমান কার্যগুলির মাধ্যমে অনুসন্ধান করে যার উদ্দেশ্যটি উদ্দেশ্য উপাদানের নাম এবং কার্যকলাপের জন্য অভিপ্রায় ডেটার সাথে মেলে। যদি টাস্কটি না পাওয়া যায়, বা উদ্দেশ্যটিতে FLAG_ACTIVITY_MULTIPLE_TASK ফ্ল্যাগ থাকে, তাহলে একটি নতুন টাস্ক তৈরি করা হয় যার রুট হিসাবে কার্যকলাপ রয়েছে৷

যদি সিস্টেমটি এমন একটি টাস্ক খুঁজে পায় যার উদ্দেশ্যটি অভিপ্রায় উপাদানের নাম এবং অভিপ্রায় ডেটার সাথে মিলে যায়, তাহলে এটি সেই কাজটিকে সামনে নিয়ে আসে এবং নতুন উদ্দেশ্যটিকে onNewIntent() এ পাস করে। নতুন কার্যকলাপ অভিপ্রায় পায় এবং সাম্প্রতিক স্ক্রীনে একটি নতুন নথি তৈরি করে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

কোটলিন

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_new_document)
    documentCount = intent
            .getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0)
    documentCounterTextView = findViewById(R.id.hello_new_document_text_view)
    setDocumentCounterText(R.string.hello_new_document_counter)
}

override fun onNewIntent(newIntent: Intent) {
    super.onNewIntent(newIntent)
    /* If FLAG_ACTIVITY_MULTIPLE_TASK has not been used, this Activity
    will be reused. */
    setDocumentCounterText(R.string.reusing_document_counter)
}

জাভা

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_new_document);
    documentCount = getIntent()
            .getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0);
    documentCounterTextView = (TextView) findViewById(
            R.id.hello_new_document_text_view);
    setDocumentCounterText(R.string.hello_new_document_counter);
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    /* If FLAG_ACTIVITY_MULTIPLE_TASK has not been used, this activity
    is reused to create a new document.
     */
    setDocumentCounterText(R.string.reusing_document_counter);
}

একটি টাস্ক যোগ করতে কার্যকলাপ বৈশিষ্ট্য ব্যবহার করুন

একটি কার্যকলাপ তার ম্যানিফেস্টে নির্দিষ্ট করতে পারে যে এটি সর্বদা <activity> অ্যাট্রিবিউট android:documentLaunchMode ব্যবহার করে একটি নতুন কাজ শুরু করে। এই বৈশিষ্ট্যটির চারটি মান রয়েছে, যা ব্যবহারকারী অ্যাপ্লিকেশনের সাথে একটি নথি খুললে নিম্নলিখিত প্রভাবগুলি তৈরি করে:

intoExisting
ক্রিয়াকলাপটি নথির জন্য একটি বিদ্যমান কার্য পুনরায় ব্যবহার করে। এটি FLAG_ACTIVITY_NEW_DOCUMENT পতাকা সেট না করে FLAG_ACTIVITY_MULTIPLE_TASK পতাকা সেট করার মতোই, যেমন একটি টাস্ক সেকশন যোগ করার জন্য ইন্টেন্ট ফ্ল্যাগ ব্যবহারে বর্ণনা করা হয়েছে।
always
ক্রিয়াকলাপটি নথির জন্য একটি নতুন টাস্ক তৈরি করে, এমনকি যদি নথিটি ইতিমধ্যে খোলা থাকে। এই মান ব্যবহার করা FLAG_ACTIVITY_NEW_DOCUMENT এবং FLAG_ACTIVITY_MULTIPLE_TASK উভয় পতাকা সেট করার সমান।
none
কার্যকলাপ নথির জন্য একটি নতুন টাস্ক তৈরি করে না। সাম্প্রতিক স্ক্রীন ক্রিয়াকলাপটিকে ডিফল্ট হিসাবে বিবেচনা করে। এটি অ্যাপের জন্য একটি একক টাস্ক প্রদর্শন করে, যা ব্যবহারকারীর সর্বশেষ আহ্বান করা যেকোনো কার্যকলাপ থেকে পুনরায় শুরু হয়।
never
কার্যকলাপ নথির জন্য একটি নতুন টাস্ক তৈরি করে না। এই মান সেট করা FLAG_ACTIVITY_NEW_DOCUMENT এবং FLAG_ACTIVITY_MULTIPLE_TASK পতাকাগুলির আচরণকে ওভাররাইড করে৷ যদি এইগুলির মধ্যে যেকোনটিই অভিপ্রায়ে সেট করা থাকে, এবং সাম্প্রতিক স্ক্রীনটি অ্যাপের জন্য একটি একক কাজ প্রদর্শন করে, ব্যবহারকারী শেষবার যে ক্রিয়াকলাপটি আহ্বান করেছিলেন তা থেকে এটি পুনরায় শুরু হয়৷

কাজগুলি সরান

ডিফল্টরূপে, একটি নথির কাজ স্বয়ংক্রিয়ভাবে সাম্প্রতিক স্ক্রীন থেকে প্রস্থান করে যখন এর কার্যকলাপ শেষ হয়। আপনি ActivityManager.AppTask ক্লাস, একটি Intent ফ্ল্যাগ বা একটি <activity> অ্যাট্রিবিউট সহ এই আচরণটিকে ওভাররাইড করতে পারেন।

আপনি সর্বদা <activity> অ্যাট্রিবিউট android:excludeFromRecents কে true এ সেট করে সাম্প্রতিক স্ক্রীন থেকে সম্পূর্ণরূপে একটি টাস্ক বাদ দিতে পারেন।

আপনি <activity> অ্যাট্রিবিউট android:maxRecents একটি পূর্ণসংখ্যা মান সেট করে আপনার অ্যাপ সাম্প্রতিক স্ক্রিনে অন্তর্ভুক্ত করতে পারে এমন সর্বাধিক সংখ্যক কাজ সেট করতে পারেন। কর্মের সর্বাধিক সংখ্যায় পৌঁছে গেলে, সাম্প্রতিক স্ক্রীন থেকে সর্বনিম্ন ব্যবহৃত টাস্ক অদৃশ্য হয়ে যায়। ডিফল্ট 16, এবং সর্বোচ্চ মান 50 (কম মেমরি ডিভাইসে 25)। 1 এর কম মান বৈধ নয়।

কাজগুলি সরাতে AppTask ক্লাস ব্যবহার করুন

সাম্প্রতিক স্ক্রিনে একটি নতুন টাস্ক তৈরি করে এমন কার্যকলাপে, আপনি নির্দিষ্ট করতে পারেন কখন টাস্কটি সরাতে হবে এবং finishAndRemoveTask() পদ্ধতিতে কল করে এর সাথে সম্পর্কিত সমস্ত ক্রিয়াকলাপ শেষ করতে হবে:

কোটলিন

fun onRemoveFromOverview(view: View) {
    // It is good pratice to remove a document from the overview stack if not needed anymore.
    finishAndRemoveTask()
}

জাভা

public void onRemoveFromRecents(View view) {
    // The document is no longer needed; remove its task.
    finishAndRemoveTask();
}

সমাপ্ত কাজগুলি ধরে রাখুন

আপনি যদি সাম্প্রতিক স্ক্রিনে একটি টাস্ক ধরে রাখতে চান, এমনকি তার কার্যকলাপ শেষ হয়ে গেলেও, কার্যকলাপটি চালু করার অভিপ্রায়ের addFlags() পদ্ধতিতে FLAG_ACTIVITY_RETAIN_IN_RECENTS ফ্ল্যাগটি পাস করুন৷

কোটলিন

private fun newDocumentIntent() =
        Intent(this, NewDocumentActivity::class.java).apply {
            addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT or
                    android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS)
            putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, getAndIncrement())
        }

জাভা

private Intent newDocumentIntent() {
    final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class);
    newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
      android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS);
    newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, getAndIncrement());
    return newDocumentIntent;
}

একই প্রভাব অর্জন করতে, <activity> অ্যাট্রিবিউট android:autoRemoveFromRecents সেট করুন false । ডিফল্ট মান নথি ক্রিয়াকলাপের জন্য true এবং নিয়মিত ক্রিয়াকলাপের জন্য false । এই বৈশিষ্ট্যটি ব্যবহার করলে FLAG_ACTIVITY_RETAIN_IN_RECENTS পতাকা ওভাররাইড হয়৷

সাম্প্রতিক URL শেয়ারিং সক্ষম করুন (শুধুমাত্র পিক্সেল)

অ্যান্ড্রয়েড 12 বা উচ্চতর সংস্করণে চলমান Pixel ডিভাইসগুলিতে, ব্যবহারকারীরা সাম্প্রতিক স্ক্রীন থেকে সরাসরি সম্প্রতি দেখা ওয়েব সামগ্রীর লিঙ্কগুলি ভাগ করতে পারেন। একটি অ্যাপে বিষয়বস্তু দেখার পরে, ব্যবহারকারী সাম্প্রতিক স্ক্রিনে সোয়াইপ করতে পারেন এবং অ্যাপটি খুঁজে পেতে পারেন যেখানে তারা সামগ্রীটি দেখেছেন, তারপর URL টি অনুলিপি বা ভাগ করতে লিঙ্ক বোতামে আলতো চাপুন৷

সম্প্রতি দেখা ওয়েব সামগ্রী শেয়ার করার জন্য একটি লিঙ্ক সহ সাম্প্রতিক স্ক্রীন৷

যেকোন অ্যাপ ব্যবহারকারীদের জন্য একটি ওয়েব UI প্রদান করে এবং onProvideAssistContent() ওভাররাইড করে সাম্প্রতিক লিঙ্ক করা সক্ষম করতে পারে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

কোটলিন

class MainActivity : AppCompatActivity() {
    protected fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    fun onProvideAssistContent(outContent: AssistContent) {
        super.onProvideAssistContent(outContent)
        outContent.setWebUri(Uri.parse("https://example.com/myCurrentPage"))
    }
}

জাভা

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public void onProvideAssistContent(AssistContent outContent) {
        super.onProvideAssistContent(outContent);

        outContent.setWebUri(Uri.parse("https://example.com/myCurrentPage"));
    }
}