কোনও ক্রিয়াকলাপ যখন বিভিন্ন ইন্টেন্টের সাথে চালু হয় তখন এটির একাধিক উদাহরণ কীভাবে প্রতিরোধ করা যায়


121

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

উদাহরণস্বরূপ, যদি আমার অ্যাপ্লিকেশনটিতে ক্রিয়াকলাপগুলি এবিসি থাকে, তবে এই সমস্যাটি এবিসিএর স্ট্যাকের দিকে নিয়ে যেতে পারে।

android:launchMode="singleTask"এই সমস্যাটি সমাধান করার জন্য আমি সমস্ত ক্রিয়াকলাপ ব্যবহার করার চেষ্টা করেছি , তবে যখনই আমি হোম বোতামটি টিপব তখন এটির ক্রিয়াকলাপ স্ট্যাকটি রুট করার জন্য অযাচিত পার্শ্ব-প্রতিক্রিয়া রয়েছে।

প্রত্যাশিত আচরণটি হ'ল: এবিসি -> হোম -> এবং অ্যাপ্লিকেশনটি পুনরুদ্ধার করা হলে আমার দরকার: এ বি সি -> হোম -> এ বি সি

হোম বোতামটি ব্যবহার করার সময় রুট ক্রিয়াকলাপটি পুনরায় সেট না করেই একই ধরণের একাধিক ক্রিয়াকলাপ শুরু করা রোধ করার জন্য কি কোনও ভাল উপায় আছে?


উত্তর:


187

এটি অনক্রিয়েটে যুক্ত করুন এবং আপনার যাওয়া ভাল হবে:

// Possible work around for market launches. See https://issuetracker.google.com/issues/36907463
// for more details. Essentially, the market launches the main activity on top of other activities.
// we never want this to happen. Instead, we check if we are the root and if not, we finish.
if (!isTaskRoot()) {
    final Intent intent = getIntent();
    if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(intent.getAction())) {
        Log.w(LOG_TAG, "Main Activity is not the root.  Finishing Main Activity instead of launching.");
        finish();
        return;       
    }
}

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

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

6
এই করে দীর্ঘ অন্ধকার (অথবা IntelliJ বা অন্যান্য আইডিই) মাধ্যমে এটা START যত অন্ধকার থেকে মোতায়েন একটি ডিবাগ সংস্করণের সাথে ঘটে। অ্যাপটি কীভাবে ডিভাইসে ইনস্টল হয় তার সাথে এর কোনও সম্পর্ক নেই । সমস্যা কারণে পথ অ্যাপ্লিকেশন হয় শুরু
ডেভিড ওয়াসার

2
এই কোডটি এই অ্যাপ্লিকেশনটির বিদ্যমান উদাহরণটিকে অগ্রভাগে আনা হবে কিনা তা নিশ্চিত করবে কিনা তা কি কেউ জানেন? অথবা এটি কেবল ফিনিস () সমাপ্তি বলে; এবং ব্যবহারকারীর কোনও দৃশ্যমান ইঙ্গিত নেই যে কিছু হয়েছে?
কার্লোস পি

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

27

আমি এটি ব্যাখ্যা করতে যাচ্ছি কেন এটি ব্যর্থ হয় এবং কীভাবে প্রোগ্রামটিমে এই বাগটি পুনরুত্পাদন করা যায় যাতে আপনি এটি আপনার পরীক্ষার স্যুটে অন্তর্ভুক্ত করতে পারেন:

  1. আপনি যখন Eclipse বা মার্কেট অ্যাপের মাধ্যমে কোনও অ্যাপ্লিকেশন চালু করেন, তখন এটি অভিপ্রায় পতাকা সহ চালু করে: FLAG_ACTIVITY_NEW_TASK।

  2. লঞ্চারের মাধ্যমে (হোম) চালু করার সময়, এটি পতাকা ব্যবহার করে: FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_BROUGHT_TO_FRONT | FLAG_ACTIVITY_RESET_TASK_IF_NEEDED, এবং " MAIN " এবং বিভাগ " লঞ্চ " বিভাগ ব্যবহার করে ।

আপনি যদি কোনও পরীক্ষার ক্ষেত্রে এটি পুনরুত্পাদন করতে চান তবে এই পদক্ষেপগুলি ব্যবহার করুন:

adb shell am start -f 0x10000000 -n com.testfairy.tests.regression.taskroot/.MainActivity 

তারপরে অন্যান্য ক্রিয়াকলাপটি পেতে যা যা করা দরকার তা করুন। আমার উদ্দেশ্যে, আমি সবেমাত্র একটি বোতাম রেখেছি যা অন্য ক্রিয়াকলাপ শুরু করে। তারপরে, লঞ্চে (হোম) এ ফিরে যান:

adb shell am start -W -c android.intent.category.HOME -a android.intent.action.MAIN

এবং এটির সাথে এটি লঞ্চের মাধ্যমে চালু করার অনুকরণ করুন:

adb shell am start -a "android.intent.action.MAIN" -c "android.intent.category.LAUNCHER" -f 0x10600000 -n com.testfairy.tests.regression.taskroot/.MainActivity

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

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


8

আপনি কি সিঙ্গলটপ লঞ্চ মোডটি ব্যবহার করে দেখেছেন ?

Http://developer.android.com/guide/topics/manifest/activity-element.html থেকে কিছু বর্ণনা এখানে দেওয়া হয়েছে :

... একটি নতুন অভিপ্রায় পরিচালনা করতে "সিঙ্গেলপ" ক্রিয়াকলাপের একটি নতুন উদাহরণও তৈরি করা যেতে পারে। যাইহোক, যদি লক্ষ্য টাস্কটির স্ট্যাকের শীর্ষে ক্রিয়াকলাপের ইতিমধ্যে কোনও বিদ্যমান উদাহরণ থাকে, তবে সেই উদাহরণটি নতুন অভিপ্রায়টি গ্রহণ করবে (অন-নিউইন্টেন্ট () কল); একটি নতুন উদাহরণ তৈরি করা হয় না। অন্যান্য পরিস্থিতিতে - উদাহরণস্বরূপ, যদি "সিঙ্গলটপ" ক্রিয়াকলাপের কোনও বিদ্যমান উদাহরণ লক্ষ্যযুক্ত কার্যে থাকে তবে স্ট্যাকের শীর্ষে নয়, বা এটি যদি স্ট্যাকের শীর্ষে থাকে তবে লক্ষ্য কার্যে নয় - একটি নতুন উদাহরণ তৈরি করা হবে এবং স্ট্যাকের দিকে ধাক্কা দেওয়া হবে।


2
আমি এটি ভেবেছিলাম, তবে যদি কার্যকলাপটি স্ট্যাকের শীর্ষে না থাকে? উদাহরণস্বরূপ, মনে হচ্ছে সিঙ্গলটপ এএ প্রতিরোধ করবে, তবে এবিএ নয়।
bsberkeley

আপনি কি সিঙ্গলটপ এবং ক্রিয়াকলাপের মধ্যে সমাপ্তির পদ্ধতিগুলি ব্যবহার করে যা চান তা অর্জন করতে পারেন?
এরিক লেভাইন

আমি জানি না এটি কীভাবে পুরোপুরি সফল হবে তা অর্জন করবে কিনা। উদাহরণ: আমি যদি ক এবং বি পপ করার পরে ক্রিয়াকলাপে থাকি, তবে একটি নতুন ক্রিয়াকলাপ এ চালু হবে এবং আমার মতো সিএ হবে না এমন কিছু হবে?
bsberkeley

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

আমি এই থ্রেডে আরও একটি উত্তর যুক্ত করেছি যাতে আপনি ম্যানিফেস্টের একটি অনুলিপি দেখতে পারেন।
বিসবার্কলে

4

সম্ভবত এটি এই সমস্যা ? নাকি একই বাগের অন্য কোনও রূপ?


কোড. google.com/p/android/issues/detail?id=26658 দেখুন , যা এটি দেখায় যে এটি গ্রহন ছাড়া অন্য কিছু কারণে ঘটেছিল।
ক্রিস্টোফার জনসন

1
সুতরাং আমি বাসী বাড়তে পারে এমন একটি বিবরণ অনুলিপি করা উচিত? কোন অংশ? লিঙ্কটি পরিবর্তিত হলে প্রয়োজনীয় অংশগুলি রাখা উচিত, এবং উত্তরটি আপ টু ডেট রাখাই কি আমার দায়িত্ব? কারও মনে করা উচিত যদি সমস্যাটি সমাধান হয় তবে লিঙ্কটি কেবল অবৈধ হয়ে যায়। এটি সর্বোপরি কোনও ব্লগের লিঙ্ক নয়।
ডুনিকেট

2

আমি মনে করি গৃহীত উত্তর ( ডুয়েন হোমিক ) এর হাতে না থাকা বিষয়গুলি রয়েছে:

আপনার বিভিন্ন অতিরিক্ত (এবং ফলস্বরূপ অ্যাপের নকল) রয়েছে:

  • আপনি যখন বাজার থেকে বা হোম স্ক্রীন আইকন দ্বারা অ্যাপ্লিকেশন চালু করেন (যা স্বয়ংক্রিয়ভাবে বাজারের দ্বারা স্থাপন করা হয়)
  • আপনি যখন লঞ্চারের মাধ্যমে অ্যাপ্লিকেশন চালু করবেন বা ম্যানুয়ালি হোম স্ক্রীন আইকন তৈরি করবেন

এখানে একটি সমাধান (নোটিফিকেশনের জন্য এসডিকেএনপিটি> = 11) যা আমি বিশ্বাস করি যে এই কেসগুলি এবং স্ট্যাটাসবারের বিজ্ঞপ্তিগুলিও আমি পরিচালনা করি।

প্রকাশিত :

    <activity
        android:name="com.acme.activity.LauncherActivity"
        android:noHistory="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <service android:name="com.acme.service.LauncherIntentService" />

লঞ্চার ক্রিয়াকলাপ :

public static Integer lastLaunchTag = null;
@Override
public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mInflater = LayoutInflater.from(this);
    View mainView = null;
    mainView = mInflater.inflate(R.layout.act_launcher, null); // empty layout
    setContentView(mainView);

    if (getIntent() == null || getIntent().getExtras() == null || !getIntent().getExtras().containsKey(Consts.EXTRA_ACTIVITY_LAUNCH_FIX)) {
        Intent serviceIntent = new Intent(this, LauncherIntentService.class);
        if (getIntent() != null && getIntent().getExtras() != null) {
            serviceIntent.putExtras(getIntent().getExtras());
        }
        lastLaunchTag = (int) (Math.random()*100000);
        serviceIntent.putExtra(Consts.EXTRA_ACTIVITY_LAUNCH_TAG, Integer.valueOf(lastLaunchTag));
        startService(serviceIntent);

        finish();
        return;
    }

    Intent intent = new Intent(this, SigninActivity.class);
    if (getIntent() != null && getIntent().getExtras() != null) {
        intent.putExtras(getIntent().getExtras());
    }
    startActivity(intent);
}

পরিষেবা :

@Override
protected void onHandleIntent(final Intent intent) {
    Bundle extras = intent.getExtras();
    Integer lastLaunchTag = extras.getInt(Consts.EXTRA_ACTIVITY_LAUNCH_TAG);

    try {
        Long timeStart = new Date().getTime(); 
        while (new Date().getTime() - timeStart < 100) {
            Thread.currentThread().sleep(25);
            if (!lastLaunchTag.equals(LauncherActivity.lastLaunchTag)) {
                break;
            }
        }
        Thread.currentThread().sleep(25);
        launch(intent);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

private void launch(Intent intent) {
    Intent launchIintent = new Intent(LauncherIntentService.this, LauncherActivity.class);
    launchIintent.addCategory(Intent.CATEGORY_LAUNCHER);
    launchIintent.setAction(Intent.ACTION_MAIN); 
    launchIintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    launchIintent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
    if (intent != null && intent.getExtras() != null) {
        launchIintent.putExtras(intent.getExtras());
    }
    launchIintent.putExtra(Consts.EXTRA_ACTIVITY_LAUNCH_FIX, true);
    startActivity(launchIintent);
}

বিজ্ঞপ্তি :

ComponentName actCN = new ComponentName(context.getPackageName(), LauncherActivity.class.getName()); 
Intent contentIntent = new Intent(context, LauncherActivity.class);
contentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);    
if (Build.VERSION.SDK_INT >= 11) { 
    contentIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); // if you need to recreate activity stack
}
contentIntent.addCategory(Intent.CATEGORY_LAUNCHER);
contentIntent.setAction(Intent.ACTION_MAIN);
contentIntent.putExtra(Consts.EXTRA_CUSTOM_DATA, true);

2

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

এটি জামারিন অ্যান্ড্রয়েডে ঠিক করতে আমি @ ডুয়ানহমিক থেকে কোডটি ব্যবহার করেছি এবং এতে যুক্ত করেছি MainActivity.OnCreate()। Xamarin সঙ্গে পার্থক্য যে পরে যেতে হবে Xamarin.Forms.Forms.Init(this, bundle);এবং LoadApplication(new App());। সুতরাং আমার OnCreate()মত দেখতে হবে:

protected override void OnCreate(Bundle bundle) {
    base.OnCreate(bundle);

    Xamarin.Forms.Forms.Init(this, bundle);
    LoadApplication(new App());

    if(!IsTaskRoot) {
        Intent intent = Intent;
        string action = intent.Action;
        if(intent.HasCategory(Intent.CategoryLauncher) && action != null && action.Equals(Intent.ActionMain, System.StringComparison.OrdinalIgnoreCase)) {
            System.Console.WriteLine("\nIn APP.Droid.MainActivity.OnCreate() - Finishing Activity and returning since a second MainActivity has been created.\n");
            Finish();
            return; //Not necessary if there is no code below
        }
    }
}

* সম্পাদনা করুন: অ্যান্ড্রয়েড .0.০ থেকে নির্দিষ্ট অবস্থার জন্য উপরের সমাধানটি যথেষ্ট নয়। আমি এখন সেট করেছেন LaunchModeকরতে SingleTask, যা মনে হয় করেছ জিনিস সঠিকভাবে আবার কাজ করি। দুর্ভাগ্যক্রমে যদিও এগুলি অন্যান্য জিনিসে কী প্রভাব ফেলতে পারে তা নিশ্চিত নয়।


0

আমারও একই সমস্যা ছিল এবং আমি নিম্নলিখিত সমাধান ব্যবহার করে এটি ঠিক করেছি।

আপনার মূল ক্রিয়াকলাপে onCreateপদ্ধতির শীর্ষে এই কোডটি যুক্ত করুন :

ActivityManager manager = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE );
List<RunningTaskInfo> tasks =  manager.getRunningTasks(Integer.MAX_VALUE);

for (RunningTaskInfo taskInfo : tasks) {
    if(taskInfo.baseActivity.getClassName().equals(<your package name>.<your class name>) && (taskInfo.numActivities > 1)){
        finish();
    }
}

আপনার ম্যানিফেস্টে এই অনুমতিটি যুক্ত করতে ভুলবেন না।

< uses-permission android:name="android.permission.GET_TASKS" />

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


0

আমারও এই সমস্যা ছিল

  1. সমাপ্তি কল না (); বাড়ির ক্রিয়াকলাপে এটি নিরবচ্ছিন্নভাবে চলত - বাড়ির ক্রিয়াকলাপটি অ্যাক্টিভিটি ম্যানেজার দ্বারা ডাকা হয় যখন এটি শেষ হয়।
  2. সাধারণত যখন কনফিগারেশন পরিবর্তন হয় (যেমন পর্দার ঘোরান, ভাষা পরিবর্তন করুন, টেলিফোনি পরিষেবা পরিবর্তনগুলি যেমন এমসিসি এমএনসি ইত্যাদি) ক্রিয়াকলাপটি পুনরায় তৈরি করুন - এবং যদি বাড়ির ক্রিয়াকলাপ চলমান থাকে তবে এটি পুনরায় এটিকে ডেকে এনে তার প্রয়োজন হিসাবে প্রকাশ করতে হবে android:configChanges="mcc|mnc"- যদি আপনার সেলুলারের সাথে সংযোগ রয়েছে, সিস্টেমটি বুট করার সময় কোন কনফিগারেশনের জন্য রয়েছে তা খুলুন বা খোলা বা যা কিছু চাপুন তা দেখুন http://developer.android.com/guide/topics/manifest/activity-element.html#config

0

এই সমাধানটি ব্যবহার করে দেখুন: শ্রেণি
তৈরি করুন Applicationএবং সেখানে সংজ্ঞা দিন:

public static boolean IS_APP_RUNNING = false;

তারপরে আপনার প্রথম (লঞ্চার) ক্রিয়াকলাপে এটি যুক্ত onCreateকরার আগে setContentView(...):

if (Controller.IS_APP_RUNNING == false)
{
  Controller.IS_APP_RUNNING = true;
  setContentView(...)
  //Your onCreate code...
}
else
  finish();

পিএস Controllerআমার Applicationক্লাস।


আপনার আদিম বুলিয়ান ব্যবহার করা উচিত, যা নাল অযৌক্তিকদের জন্য পরীক্ষা করে তোলে।
ওয়ান্ডারসসাবো

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

-2

অনুমোদনের সাথে সংযোগ স্থাপনের সাথে সংযুক্তি সহ সিঙ্গলআইনস্ট্যান্স লঞ্চ মোডটি ব্যবহার করার চেষ্টা করুন এটি সর্বদা নতুন কার্যক্রমে ক্রিয়াকলাপ তৈরি করবে তবে এর পুনরুত্পাদনকেও অনুমতি দেবে। চেক ডিস: অ্যাফিনিটি বৈশিষ্ট্য


2
সম্ভবত কাজ করবে না কারণ ডকুমেন্টেশন অনুসারে "পুনরায় প্যারেন্টিং" স্ট্যান্ডার্ড "এবং" সিঙ্গলটপ "মোডের মধ্যে সীমাবদ্ধ" " কারণ "" একক টাস্ক "বা" সিঙ্গেলআইন্সট্যান্স "প্রবর্তন পদ্ধতিগুলির সাথে ক্রিয়াকলাপ কেবল কোনও কার্যের মূলে থাকতে পারে"
বিসবার্কলে

-2

আমি একই ক্রিয়াকলাপ শুরু করা রোধ করার একটি উপায় পেয়েছি, এটি আমার পক্ষে দুর্দান্ত কাজ করে

if ( !this.getClass().getSimpleName().equals("YourActivityClassName")) {
    start your activity
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.