প্রোগ্রামিয়মে কোনও অ্যান্ড্রয়েড অ্যাপ কীভাবে প্রস্থান করবেন?


93

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

আমি Activity.moveTaskToBack(true)আপনাকে হোম স্ক্রিনে পেতে পারি তা জানতে পেরেছি । ঠিক আছে, এটি বন্ধ হচ্ছে না তবে প্রক্রিয়াটির পটভূমি। সুতরাং এটি কার্যকর?

অ্যাপটি পুরোপুরি বন্ধ করতে আমার কোন পদ্ধতিটি ব্যবহার করা উচিত? উপরে বর্ণিত বা অন্য কোনও পদ্ধতি / উপরোক্ত পদ্ধতির অন্য ব্যবহার?


অ্যাকশন বার কেন ব্যবহার করবেন না। অ্যাপ্লিকেশন আইকনে ক্লিক করে হোম স্ক্রিনে নেভিগেট করুন। প্রস্থান করতে ব্যাকবুটনে ক্লিক করুন
রঘুনন্দন

@ রঘুনন্দন: যেমনটি আমি উল্লেখ করেছি, ক্লায়েন্টের প্রয়োজনীয়তা :(
লেবু রস

এটি android.os.Process.killProcess (android.os.Process.myPid ()) কে সহায়তা করে কিনা তা পরীক্ষা করে দেখুন;
সানোরটন স্ট্যানলি


উত্তর:


71

প্রকৃতপক্ষে প্রত্যেকে অনক্লিক ইভেন্টে অ্যাপ্লিকেশনটি বন্ধ করার সন্ধান করছে, যেখানেই কার্যকলাপ হতে পারে ....

তাই বন্ধুরা এই কোডটি চেষ্টা করে দেখুন। অনক্লিক ইভেন্টে এই কোডটি রাখুন

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
    homeIntent.addCategory( Intent.CATEGORY_HOME );
    homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
    startActivity(homeIntent); 

8
এটি পিকজেনের মতো অ্যাপ্লিকেশনটি এখনও চলছে বলে অনুরোধ করে "অ্যাপ্লিকেশনটিকে পুরোপুরি বন্ধ করে দেয় না" তবে এটি একটি দুর্দান্ত বিকল্প
La masse

4
আমার মনে হয় না - যদি কোনও ক্রিয়াকলাপ ফ্ল্যাশ
অ্যাক্টিভিটি নতুন টাস্কের সাথে শুরু

51

আপনি System.exit () কল করতে পারেন; সমস্ত ক্রিয়াকলাপ থেকে মুক্তি পেতে।

    submit=(Button)findViewById(R.id.submit);

            submit.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
android.os.Process.killProcess(android.os.Process.myPid());
                    System.exit(1);

                }
            });

4
এটি আমাকে প্রথম ক্রিয়াকলাপে নিয়ে যাচ্ছে
লেবু রস

8
@ অচিটমিতল সিস্টেম.এক্সিট (1) ক্রিয়াকলাপ স্ট্যাক বা কার্যগুলি পুনরায় সেট করার গ্যারান্টি দিবে না (দেখুন ডেভেলপার.অ্যান্ড্রয়েড . com/guide/compferences/… )। এই পদ্ধতির ফলে যথাযথ সময়ে অ্যাপটি যথাযথভাবে বন্ধ করার (সমস্ত ক্রিয়াকলাপ ধ্বংস করা) গ্যারান্টি নেই।
ইগোরগানাপলস্কি

প্রস্থান করার জন্য সমস্ত ক্রিয়াকলাপ নয়।
জিতেন্দ্র

49

এআইপি 16 এ প্রকাশিত ফিনিশএফিনিটি পদ্ধতিটি চলমান সমস্ত কার্যক্রম বন্ধ করে এবং অ্যাপটি বন্ধ করে দেয়:

this.finishAffinity();

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

মনে রাখবেন যে এই সমাপ্তিটি আপনাকে পূর্ববর্তী ক্রিয়াকলাপে ফলাফল সরবরাহ করতে দেয় না এবং যদি আপনি এটি করার চেষ্টা করছেন তবে একটি ব্যতিক্রম ছুঁড়ে দেওয়া হবে।


21 এপ্রিল থেকে আপনি ব্যবহার করতে পারেন:

finishAndRemoveTask();

এই কার্যক্রমে সমস্ত ক্রিয়াকলাপ শেষ করে এবং সাম্প্রতিক কার্য তালিকা থেকে এটিকে সরিয়ে দেয়।

বিকল্পসমূহ:

getActivity().finish();
System.exit(0);


int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);


Process.sendSignal(Process.myPid(), Process.SIGNAL_KILL);


Intent i = new Intent(context, LoginActivity.class);
i.putExtra(EXTRA_EXIT, true);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(i);

উত্স: প্রোগ্রামক্রমে অ্যান্ড্রয়েড অ্যাপ্লিকেশনটি কীভাবে ছাড়বেন


আশা করি এটা সাহায্য করবে! শুভকামনা!


4
System.exit () ব্যবহার করবেন না। অ্যান্ড্রয়েড অ্যাপটি প্রস্থান করার পরে পুনরায় চালু করার চেষ্টা করবে। আপনি একটি লুপ শেষ করতে পারে।
অ্যান্ড্রয়েডদেভ

42

আপনি যদি নিজের অ্যাপ্লিকেশন থেকে প্রস্থান করতে চান তবে আপনার বোতাম টিপে দেওয়া ইভেন্টের মধ্যে এই কোডটি ব্যবহার করুন:

public void onBackPressed() {
  moveTaskToBack(true);
  android.os.Process.killProcess(android.os.Process.myPid());
  System.exit(1);
}

24
 @Override
    public void onBackPressed() {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setTitle("Exit Application?");
        alertDialogBuilder
                .setMessage("Click yes to exit!")
                .setCancelable(false)
                .setPositiveButton("Yes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                moveTaskToBack(true);
                                android.os.Process.killProcess(android.os.Process.myPid());
                                System.exit(1);
                            }
                        })

                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                        dialog.cancel();
                    }
                });

        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
    }

4
সিস্টেম.এক্সিট (1) এর মধ্যে কী আলাদা; এবং System.exit (0);
Pyae Phyo

System.exit (1) এর অর্থ অ্যাপ্লিকেশনটি কিছু ত্রুটি সহ শেষ হয়েছে, অন্যদিকে System.exit (0) এর অর্থ অ্যাপটি কোনও ত্রুটি ছাড়াই শেষ হয়েছে। এইভাবে প্রস্থান করার পরে বিভিন্ন লিনাক্স / ইউনিক্স কমান্ডগুলি (ত্রুটি) শর্তগুলি ফিরে আসে।
আইওএস-কোডার


13

প্রকৃতপক্ষে দুটি সম্ভাব্য পরিস্থিতি রয়েছে:

  1. আপনি ক্রিয়াকলাপ থেকে প্রস্থান করতে চাইতে পারেন
  2. অথবা আপনি অ্যাপ্লিকেশন থেকে প্রস্থান করতে চান

আপনি নিম্নলিখিত কোড ব্যবহার করে ক্রিয়াকলাপ থেকে প্রস্থান করতে পারেন:

var intent = new Intent(Intent.ActionMain);
intent.AddCategory(Intent.CategoryHome);
intent.SetFlags(ActivityFlags.NewTask);
startActivity(intent);
finish();

তবে এটি একই প্রয়োগের অন্তর্নিহিত ক্রিয়াকলাপগুলিকে হত্যা করবে না। এটি কেবল অ্যাপ্লিকেশনটি ছোট করবে।

আপনি যদি অ্যাপ্লিকেশন থেকে প্রস্থান করতে চান তবে এর প্রক্রিয়াটি শেষ করতে নিম্নলিখিত কোডটি ব্যবহার করুন:

android.os.Process.killProcess(android.os.Process.myPid()); 

মনো উন্নয়নের জন্য কেবল ব্যবহার করুন

process.KillProcess(Process.MyPid());

মাইপিড () হ'ল আপনার পদ্ধতি বা কী ...... সুতরাং আপনি কীভাবে মপিড লিখেছেন ... আপনাকে পদ্ধতি সহ লিখতে হবে .....
অমিতসর্মা

@amitsharma MyPid () প্রক্রিয়া বর্গ, যা এই প্রক্রিয়ার আইডেন্টিফায়ার ফেরত পাঠায়, যা killProcess (int-) এবং sendSignal (int-, int-) সঙ্গে ব্যবহার করা যেতে পারে থেকে একটি পদ্ধতি
Kasun

এটি কী ব্যাকগ্রাউন্ড পরিষেবা এবং সম্প্রচারের রিসিভারগুলি বন্ধ করবে বা কেবল নিরাপদে অ্যাপটি বন্ধ করবে?
উসমান রানা

সুতরাং, android.os.Process.killProcess(android.os.Process.myPid()); এবং মধ্যে পার্থক্য কি process.KillProcess(Process.MyPid());?
DysaniazzZ

7

কেমন this.finishAffinity()

ডক্স থেকে,

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


6
android.os.Process.killProcess(android.os.Process.myPid());

আমার ক্ষেত্রে, এটি আমার জীবন বাঁচিয়েছে। ধন্যবাদ!
লিফকা

4

এটি টাস্ক (ক্রিয়াকলাপের স্ট্যাক) সাফ করবে এবং নতুন টাস্ক শুরু করবে

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
System.exit(1);

আপনি কেন এই কোডটি উত্তর হিসাবে পোস্ট করেছেন এবং এটি কী করে তা ব্যাখ্যা করুন।
এম আদিল খালিদ

4
স্ট্যাক ওভারফ্লোতে স্বাগতম! আপনি যদি এই ব্যবহারকারীর সমস্যার সমাধান করতে পারেন, কেবলমাত্র কোড-উত্তরগুলি ভবিষ্যতে এই প্রশ্নে আসা ব্যবহারকারীদের পক্ষে খুব কার্যকর নয়। আপনার কোডটি কেন মূল কোডটি সমাধান করে তা বোঝাতে আপনার উত্তরটি সম্পাদনা করুন।
জো সি

3
 @Override
    public void onBackPressed() {
        Intent homeIntent = new Intent(Intent.ACTION_MAIN);
        homeIntent.addCategory( Intent.CATEGORY_HOME );
        homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(homeIntent);
    }

2

এটি আপনার অনক্লিকের মধ্যে রাখুন:

moveTaskToBack(true);
    finish()

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

আপনি যদি এটি করেন তবে অ্যাপ্লিকেশনটি এখনও পটভূমিতে চলবে
মোহনাদ হাদাদিন

ভাল কাজ করছে। আমার কেসটি হ'ল: স্প্ল্যাশঅ্যাক্টিভিটি মেইনএকটিভিটি চালায়। যখন মেইনএ্যাকটিভিটির অ্যাপ্লিকেশনটি ফিরে আসবে তখন প্রত্যাশা অনুযায়ী প্রস্থান করা হবে। অন্যান্য সমস্ত কেস আমাকে স্প্ল্যাশ ক্রিয়াকলাপ ফিরে পেয়েছে!
জভিয়াচস

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

2

একটি কল এ চেষ্টা করুন। আমি কখনও কখনও এটি একটি বোতামের অন ক্লিকে ব্যবহার করি।

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

এটি আপনার অ্যাপ্লিকেশনটি বন্ধ করার পরিবর্তে ড্যাশবোর্ডটি খোলে যাতে আপনার অ্যাপটি বন্ধ হয়ে যায় is

আরও স্পষ্টতা অ্যান্ড্রয়েডের জন্য এই প্রশ্নটি পড়ুন - অ্যাপ্লিকেশন কোড থেকে প্রস্থান করুন


2

এটি ব্যবহার করুন.ফিনিশএফিনিটি (); সমাপ্তির পরিবর্তে সেই বোতামটিতে (); যদি এটি কাজ না করে তবে অ্যান্ড্রয়েড যুক্ত করেও চেষ্টা করতে পারেন: noHistory = "সত্য" আপনার ম্যানিফেস্টে এবং তারপরে uisng ফিনিস () দ্বারা আপনার ক্রিয়াকলাপ শেষ করুন; বা ফিনিশএফিনিটি ();

আশা করি এটা সাহায্য করবে....:)


2

Xamarin.Android এ অর্জন করা:

    public override void OnBackPressed()
    {
        MoveTaskToBack(true);
        Process.KillProcess(Process.MyPid());
        Environment.Exit(1);
    }

এটি কি সিস্টেম.ইএনভায়রনমেন্ট.এক্সিট বা অ্যান্ড্রয়েড.ওস.এনভায়রনমেন্ট.এক্সিটের রেফারেন্স?
মফেন

2

শুধু এই দুটি ফাংশন কল

 finish();
 moveTaskToBack(true);

আপনার উত্তর নিম্ন মানের পোস্টে এসেছিল। আপনার কোডটি স্বতঃস্পষ্ট বর্ণনীয় হলেও দয়া করে কিছু ব্যাখ্যা সরবরাহ করুন।
হর্ষ বিয়ানি

2
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
System.exit(1);

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


আমি এটি করেছি এবং তারপরে 5 তলা থেকে ফোন ছুড়ে দিয়েছি, সমস্ত কার্যক্রম থেক্স থেকে বন্ধ হয়ে গেছে
পাসচালিস

1

onCreate এ সিঙ্গেলটপ এবং ফিনিস () দিয়ে ভুত ক্রিয়াকলাপটি কৌশলটি করা উচিত


1

এটি শুধুমাত্র ব্যবহার করে কাজ করে moveTaskToBack(true);



1

কেউ এখনো ভাবছেন, তাহলে জন্য Xamarin.Android (আমার ক্ষেত্রে এছাড়াও Monogame এটা চলমান) কমান্ড FinishAndRemoveTask()উপর Activityআছে কাজ খুব ভাল!



0

আপনার ব্যাকপ্রেসে কেবল কোডটি ব্যবহার করুন

                    Intent startMain = new Intent(Intent.ACTION_MAIN);
                    startMain.addCategory(Intent.CATEGORY_HOME);
                    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(startMain);

0

যদি আপনি ক্রিয়াকলাপের মধ্যে যোগাযোগের জন্য আপনার অ্যাপ্লিকেশনটিতে ইভেন্টবাস (বা সত্যই কোনও অন্য পাব / উপ গ্রন্থাগার) ব্যবহার করে থাকেন তবে আপনি তাদের একটি সুস্পষ্ট ইভেন্ট প্রেরণ করতে পারেন:

final public class KillItWithFireEvent
{
    public KillItWithFireEvent() {}

    public static void send()
    {
        EventBus.getDefault().post(new KillItWithFireEvent());
    }
}

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


0

আপনি অ্যাপ্লিকেশন থেকে প্রস্থান করতে চাইলে কেবল নীচের দুটি লাইনটি চালান

android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);

0
finish();
 finishAffinity();
 System.exit(0);

আমার জন্য কাজ


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

0

কেবল এটিকে কল করুন:

finishAffinity();

এই কোডটি প্রশ্নের উত্তর দিতে পারে, কেন এবং / অথবা এই কোডটির প্রশ্নের উত্তর কীভাবে তার দীর্ঘমেয়াদী মানকে উন্নত করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করে।
ইগোর এফ।

0

আপনার প্রস্থান / প্রস্থান বোতামে এই পদ্ধতিটি লিঙ্ক করুন

public void quitGame(View view) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            finishAndRemoveTask();
        } else {
            finish();
        }
    }

-1

যদি আপনি উভয় ফিনিস ব্যবহার করেন এবং প্রস্থান করেন তবে আপনার অ্যাপ্লিকেশন প্রশংসাপূর্ণভাবে বন্ধ হবে

সমাপ্তি ();

System.exit (0);

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