কীভাবে অ্যাপ্লিকেশন থেকে প্রস্থান করবেন এবং হোম স্ক্রিনটি দেখবেন?


195

আমার একটি অ্যাপ্লিকেশন রয়েছে যেখানে হোম পৃষ্ঠায় অ্যাপ্লিকেশনটির মাধ্যমে নেভিগেশনের জন্য আমার বোতাম রয়েছে।

সেই পৃষ্ঠায় আমার কাছে "এক্সিট" বোতাম রয়েছে যা ক্লিক করলে ব্যবহারকারীকে ফোনের হোম স্ক্রিনে নিয়ে যেতে হবে যেখানে অ্যাপ্লিকেশন আইকন রয়েছে।

আমি এটা কিভাবে করবো?

উত্তর:


326

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

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

25
আপনি এমনকি ব্যবহার করতে পারেন .. "মুভিটাস্কটোব্যাক (সত্য);"
হেমন্ত কুমার

17
এটি কি সমস্ত সংস্থান লেনদেন করবে? কারণ আমি যখন অ্যাপটি এইভাবে প্রস্থান করি এবং কিছুক্ষণ পরে আমি আবার অ্যাপ্লিকেশন আইকনে ক্লিক করি। আমি যেখানে রেখে এসেছি সেখান থেকে এটি শুরু হয়। তার মানে অ্যাপ্লিকেশনটি এখনও পটভূমিতে চলছিল।
আদিল মালিক

12
Activity.finish ();
এইচবি0

11
এটি আপনার অ্যাপটিকে পটভূমিতে রাখে তাই এটি অ্যাপ্লিকেশন থেকে প্রস্থান করে না।
হারমান শোএনফিল্ড

3
এই উত্তরটি কেবল হোম স্ক্রিনটি প্রদর্শিত হবে এবং ওপেন যেমন চায় তেমনভাবে অ্যাপ্লিকেশনটি পুরোপুরি প্রস্থান / বন্ধ করবে না।
Basher51

74

আপনি এই জাতীয় কিছু চেষ্টা করতে পারেন হতে পারে

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

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

এছাড়াও, অভিপ্রায়টিতে বুলেঁয়ের মতো কিছু অতিরিক্ত যুক্ত করুন

intent.putExtra("EXIT", true);

তারপর রুট কার্যকলাপ, মান পরীক্ষা booleanএবং যে কল ফিনিস (অনুযায়ী), মধ্যে onCreate()শিকড় কার্যকলাপের

if (getIntent().getBooleanExtra("EXIT", false)) {
 finish();
}

1
অনুরোধ শেষ করতে অনক্রিটে কিছুই করবেন না।
imcaptor

2
আমার ক্ষেত্রে আমাকেও ওভাররাইড করতে হয়েছিল onNewIntent। কারণ ইন্টনেট.গেটেক্সট্রা () নালার থেকে যাচ্ছে।
zznq

এবং এই পদ্ধতিটি RootActivityস্ট্যাক থেকে পুনরায় শুরু করার পরিবর্তে আপনার পুনরায় আরম্ভ করবে । এই স্ট্যাকওভারফ্লো.com
দর্পণ

28
System.exit(0);

সম্ভবত আপনি যা খুঁজছেন এটি সম্পূর্ণ অ্যাপ্লিকেশনটি বন্ধ করে আপনাকে হোম স্ক্রিনে নিয়ে যাবে।


1
এটি কি ছোট হাতের প্রস্থান হওয়া উচিত?
ক্যারল

1
System.exit (0) হওয়া উচিত। তবে এটি কোনওভাবেই কার্যকর নয়।
superarts.org

7
কোর অ্যান্ড্রয়েড টিমের পরামর্শ অনুসারে System.exit (0) ব্যবহার করা উচিত নয়।
দীনেশ ভেঙ্কাটা

2
আমি মনে করি এটি ব্যতিক্রমী পরিস্থিতিতে সেরা পন্থা। এমন একটি অ্যাপের জন্য বলুন যার জন্য ইন্টারনেট প্রয়োজন এবং সংযোগটি অ্যাপ্লিকেশনটিতে কয়েকটি ক্রিয়াকলাপ ভেঙে দেয়। একটি সতর্কতা ডায়ালগ প্রদর্শিত হতে পারে (বোতাম ছাড়াই)। পুনরায় প্রবেশের জন্য আবার লগইন / আরম্ভকরণ প্রয়োজন হওয়ায় পিছনে বোতামটি পুরো অ্যাপটি থেকে বেরিয়ে আসা দরকার। System.exit হ'ল একমাত্র জিনিস যা যুক্তিসঙ্গতভাবে কাজ করে তা আমি খুঁজে পেয়েছি। @ User1699548 মন্তব্য সম্পর্কে নিশ্চিত না যদিও।
হারমান শোএনফিল্ড

1
এটিও কি সেই অ্যাপ্লিকেশন সম্পর্কিত সমস্ত পরিষেবাগুলিকেও মেরে ফেলবে?
বসরা

25

এটি আমার পক্ষে ভাল কাজ করে।
পূর্ববর্তী সমস্ত কার্যক্রম বন্ধ করুন:

    Intent intent = new Intent(this, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("Exit me", true);
    startActivity(intent);
    finish();

তারপরে মেইনএকটিভিটি অনক্রিট () পদ্ধতিতে মেইনএ্যাকটিভিটি শেষ করতে এটি যুক্ত করুন

    setContentView(R.layout.main_layout);

    if( getIntent().getBooleanExtra("Exit me", false)){
        finish();
        return; // add this to prevent from doing unnecessary stuffs
    }

এটি আমার পক্ষে কাজ করে না। এটি আমার অ্যাপ্লিকেশনটি দৃশ্যমান কিছুই ছাড়াই ফেলেছে, তবে কীভাবে তা চালিয়ে যাচ্ছে। আমি থ্রেডগুলি চারদিকে ঝুলতে এবং ডিবাগারে অপেক্ষা করতে দেখছি যা আসলে কখনই কিছু করতে পারে না।
স্টিফেন এম -on ধর্মঘট-

23

প্রথমে পদ্ধতিটি ব্যবহার করে আপনার আবেদন শেষ করুন finish();

এবং তারপরে ফোর্স নিকটস্থ করার জন্য অনডাস্ট্রয়েতে লাইনগুলির নীচে যুক্ত করুন

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

3
এটি কখনই ব্যবহার করবেন না, কারণ এটি সম্পদ মুক্ত করার কোনও সুযোগ পায় না
জ্যাকি

1
-1 কারণ অনডাস্ট্রয় কার্যকর করা হয় যখনই আপনি ক্রিয়াকলাপটি ত্যাগ করেন না কেবল যখন পিছনের কী টিপানো হয়।
হামজেহ সোবহ

5
@ জ্যাকি: এবং প্রক্রিয়াটি হত্যার ফলে কীভাবে কোনও সিস্টেমের সংস্থান মুক্ত হয় না?
হারমান শোয়েনফিল্ড

1
এর super.onDestroy()পরে কেন killProcess()? এই লাইন এমনকি পৌঁছে যাবে?
shoosh

এটি কি আপনার সমস্ত পরিষেবাও মেরে ফেলবে না?
ইরশু ১১

20

আপনি যদি কোনও কার্যকলাপ শেষ করতে চান তবে আপনি কেবল কল করতে পারেন finish()। তবে স্ক্রিনে একটি প্রস্থান বোতাম থাকা খারাপ অভ্যাস।


2
আমি আপনার "এই অ্যাপ্লিকেশনটি সর্বশেষ সংস্করণে আপডেট করতে হবে" এর জন্য ব্যবহার করছি এবং আমি চাই না তারা এটি ব্যবহার করা চালিয়ে যাবে। তবু খারাপ অভ্যাস ...?
বিট্রি

@ বিট্রি হ্যাঁ যে কোনও খারাপ অভ্যাসের মতো, এমন ঘটনাও রয়েছে যেখানে এটি আপনার একমাত্র বিকল্প এবং আপনি এটি ব্যবহার করেন কারণ অন্য কিছু করার চেষ্টা করা অযৌক্তিক হবে। এটি অবৈধ সিনট্যাক্সের বিপরীতে যেমন খারাপ অভ্যাস হ'ল তা হ'ল এটি কয়েকটি কয়েকটি ক্ষেত্রে এটি উপলভ্য, তবে এটির জন্য আরও ভাল উপায় খুঁজে পাওয়ার জন্য আপনার অনর্থক চেষ্টা করা উচিত। আপনার ক্ষেত্রে, একটি নেই।
মনিকার লসুইট

17

কিছু ক্রিয়াকলাপ আসলে আপনি যখন আবার খুলতে চান না যখন ব্যাকটি এমন স্প্ল্যাশ স্ক্রিন ক্রিয়াকলাপ, ওয়েলকাম স্ক্রিন ক্রিয়াকলাপ, কনফার্মেশন উইন্ডো টিপবে। ক্রিয়াকলাপের স্ট্যাকে আসলে আপনার এটির দরকার নেই। আপনি এটি => ওপেন ম্যানিফেস্ট.এক্সএমএল ফাইলটি ব্যবহার করে একটি গুণাবলী যুক্ত করতে পারেন

অ্যান্ড্রয়েড noHistory = "সত্য"

এই কার্যক্রম।

<activity
    android:name="com.example.shoppingapp.AddNewItems"
    android:label="" 
    android:noHistory="true">
</activity>

অথবা

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

@Override
public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);

}

অথবা

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

@Override
public void onBackPressed() {
  finish();
}

16

আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটি প্রস্থান করার পরামর্শ দেওয়া হয় না। আরও তথ্যের জন্য এই প্রশ্নটি দেখুন ।

ব্যবহারকারী সর্বদা হোম বোতামের মাধ্যমে বা পিছনের বোতামের মাধ্যমে প্রথম ক্রিয়াকলাপে আপনার অ্যাপটি প্রস্থান করতে পারেন।


3
@janusz: টিপে হোম বাটন কখনো Android অ্যাপ্লিকেশানটি প্রস্থান, এর পরিবর্তে এটি ব্যাকগ্রাউন্ডে রয়েছে ...
Jayesh

5

(আমি পূর্ববর্তী উত্তরগুলি চেষ্টা করেছি তবে সেগুলির কয়েকটি পয়েন্টের অভাব রয়েছে return;activity উদাহরণস্বরূপ, আপনি যদি ক্রিয়াকলাপ শেষ করার পরে যদি এটি না করেন , তবে বাকী ক্রিয়াকলাপ কোডটি চালিত হয় Also এছাড়াও আপনাকে রিটার্নের সাথে অনক্রিট সম্পাদনা করতে হবে If আপনি সুপার.অনক্রিট চালনা না করলে () আপনি একটি রানটাইম ত্রুটি পাবেন)

বলুন আপনার আছে MainActivityএবং ChildActivity

চাইল্ডএ্যাকটিভিটির অভ্যন্তরে এটি যুক্ত করুন:

Intent intent = new Intent(ChildActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
return true;

মেইনএ্যাকটিভিটির অনক্রিটের ভিতরে এটি যুক্ত করুন:

@Override
public void onCreate(Bundle savedInstanceState) {

    mContext = getApplicationContext();

    super.onCreate(savedInstanceState);

    if (getIntent().getBooleanExtra("EXIT", false)) {
        finish();
        return;
    }
    // your current codes
    // your current codes
}

4

অ্যাপ্লিকেশন সম্পর্কিত স্ট্যাকের সমস্ত কাজ বন্ধ করতে ফিনিশএফিনিটি পদ্ধতিটি ব্যবহার করার জন্য আরও একটি বিকল্প রয়েছে।

দেখুন: https://stackoverflow.com/a/27765687/1984636


3

যখন আপনি সেই ক্রিয়াকলাপের ড্রেড্রয়ে () ফিনিশকে কল করবেন এবং এটি ক্রিয়াকলাপের স্ট্যাকের আগের ক্রিয়াকলাপে ফিরে যাবে ... সুতরাং .. প্রস্থান করার জন্য ফিনিস () বলা হবে না;


3

আমি যা করেছি তা এখানে:

SomeActivity.java

 @Override
    public void onBackPressed() {
            Intent newIntent = new Intent(this,QuitAppActivity.class);
            newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(newIntent);
            finish();
    }

QuitAppActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      finish();
}

মূলত আপনি যা করেছেন তা স্ট্যাক এবং প্রবর্তন থেকে সমস্ত ক্রিয়াকলাপ সাফ হয়ে গেছে QuitAppActivity, যা কাজটি শেষ করবে।


ভাল পদ্ধতির। ইনটেন্টের মাধ্যমে মানগুলি পাস করার দরকার নেই।
ব্যবহারকারী3144836

0

পরে লাইন নিম্নলিখিত যোগ করুন finish();মধ্যে onDestroy():

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

0

নিম্নলিখিত কোড স্নিপেট ব্যবহার করে আমি অ্যাপ্লিকেশন থেকে বেরিয়ে আসার চেষ্টা করেছি, এটি আমার জন্য কাজ করেছে। আশা করি এটি আপনাকে সহায়তা করবে। আমি 2 টি ক্রিয়াকলাপ সহ ছোট ডেমো করেছি

প্রথম ক্রিয়াকলাপ

public class MainActivity extends Activity implements OnClickListener{
    private Button secondActivityBtn;
    private SharedPreferences pref;
    private SharedPreferences.Editor editer;

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

        secondActivityBtn=(Button) findViewById(R.id.SecondActivityBtn);
        secondActivityBtn.setOnClickListener(this);

        pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE);
        editer = pref.edit();

        if(pref.getInt("exitApp", 0) == 1){
            editer.putInt("exitApp", 0);
            editer.commit();
            finish();
        }
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.SecondActivityBtn:
            Intent intent= new Intent(MainActivity.this, YourAnyActivity.class);
            startActivity(intent);
            break;
        default:
            break;
        }
    }
}

আপনার অন্য কোনও ক্রিয়াকলাপ

public class YourAnyActivity extends Activity implements OnClickListener {
    private Button exitAppBtn;
    private SharedPreferences pref;
    private SharedPreferences.Editor editer;

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

        exitAppBtn = (Button) findViewById(R.id.exitAppBtn);
        exitAppBtn.setOnClickListener(this);

        pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE);
        editer = pref.edit();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.exitAppBtn:
            Intent main_intent = new Intent(YourAnyActivity.this,
                    MainActivity.class);
            main_intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(main_intent);
            editer.putInt("exitApp",1);
            editer.commit();
            break;
        default:
            break;
        }
    }
}

0

আমি এটি পর্যবেক্ষক মোড দিয়ে করেছি।

পর্যবেক্ষক ইন্টারফেস

public interface Observer {
public void update(Subject subject);
}

বেস সাবজেক্ট

public class Subject {
private List<Observer> observers = new ArrayList<Observer>();

public void attach(Observer observer){
    observers.add(observer);
}

public void detach(Observer observer){
    observers.remove(observer);
}

protected void notifyObservers(){
    for(Observer observer : observers){
        observer.update(this);
    }
}
}

চাইল্ড সাবজেক্ট প্রস্থান পদ্ধতি প্রয়োগ করে

public class ApplicationSubject extends Subject {
public void exit(){
    notifyObservers();
}
}

মাই অ্যাপ্লিকেশন যা আপনার অ্যাপ্লিকেশনটিকে প্রসারিত করবে

public class MyApplication extends Application {

private static ApplicationSubject applicationSubject;

public ApplicationSubject getApplicationSubject() {
            if(applicationSubject == null) applicationSubject = new ApplicationSubject();
    return applicationSubject;
}

}

বেস ক্রিয়াকলাপ

public abstract class BaseActivity extends Activity implements Observer {

public MyApplication app;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    app = (MyApplication) this.getApplication();
    app.getApplicationSubject().attach(this);
}

@Override
public void finish() {
    // TODO Auto-generated method stub
            app.getApplicationSubject().detach(this);
    super.finish();
}

/**
 * exit the app
 */
public void close() {
    app.getApplicationSubject().exit();
};

@Override
public void update(Subject subject) {
    // TODO Auto-generated method stub
    this.finish();
}

}

আসুন এটি পরীক্ষা করি

public class ATestActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    close(); //invoke 'close'
}
}

0

আপনি যদি অ্যাপ্লিকেশন থেকে প্রস্থান করতে চান তবে এই কোডটি আপনার ফাংশনের আওতায় রাখুন

public void yourFunction()
{
finishAffinity();   
moveTaskToBack(true);

}



//For an instance, if you want to exit an application on double click of a 
//button,then the following code can be used.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 2) {
        // do something on back.
        From Android 16+ you can use the following:

        finishAffinity();
        moveTaskToBack(true);
    }

    return super.onKeyDown(keyCode, event);
}

0

100% জরিমানা কাজ করে। ক্লিক করুন (পদ্ধতি) আপনার অ্যাপ্লিকেশন থেকে প্রস্থান করার জন্য এটি কোড

    Button exit = (Button)findViewById(R.id.exitbutton);

    exit.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View view) {

            finish();
            android.os.Process.killProcess(android.os.Process.myPid());
            System.exit(1);
            Toast.makeText(getApplicationContext(), "Closed Completely and Safely", Toast.LENGTH_LONG).show();

        }
    });

0

অ্যাপ্লিকেশনটি হ্রাস করতে আপনি কেবল moveTaskToBack(true)আপনার প্রস্থান বোতামে যুক্ত onClickedListenerকরতে পারেন।

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


0

হতে পারে আমার কোডটি হেপলস করতে পারে (মেইন_অ্যাক্টিভিটি.জভা):

    @Override
    protected void onDestroy() {
        super.onDestroy();
        this.finish();
        exit(0);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  {
        switch(keyCode)    {
            case KeyEvent.KEYCODE_BACK:
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle("My application").setMessage("Keep playing?").setIcon(R.drawable.icon);
                // Go to backgroung
                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) { moveTaskToBack(true); }
                });
                // Exit from app calling protected void onDestroy()
                builder.setNegativeButton("CLOSE APPLICATION", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) { onDestroy(); }
                });
                // Close this dialog
                builder.setNeutralButton("CANCEL", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) { dialog.cancel(); }
                });
                AlertDialog dialog = builder.create();
                dialog.show();
                return true;
        }
        return false;
    }

-2

আপনি যদি আপনার আবেদন থেকে প্রস্থান করতে চান। তারপরে আপনার বোতাম টিপে রাখা ইভেন্টের মধ্যে এই কোডটি ব্যবহার করুন। মত:

public void onBackPressed()
{
    moveTaskToBack(true);
    android.os.Process.killProcess(android.os.Process.myPid());
    System.exit(1);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.