"অ্যান্ড্রয়েড.ভিউ. উইন্ডো ম্যানেজার $ ব্যাডটোকেন এক্সেপশন: উইন্ডো যুক্ত করতে অক্ষম" বুয়েডার.শোতে ()


118

আমার প্রধান থেকে activity, আমাকে একটি অভ্যন্তর শ্রেণি কল করতে হবে এবং ক্লাসের মধ্যে একটি পদ্ধতিতে, আমাকে দেখাতে হবে AlertDialog। এটিকে বরখাস্ত করার পরে, যখন ঠিক আছে বোতামটি টিপছে, ক্রয়ের জন্য গুগল প্লেতে এগিয়ে যান।

বেশিরভাগ সময় জিনিসগুলি পুরোপুরি কাজ করে তবে কয়েকটি ব্যবহারকারীর জন্য এটি ক্রাশ হচ্ছে builder.show()এবং "android.view.WindowManager$BadTokenException:ক্র্যাশ লগ থেকে উইন্ডোটি যুক্ত করতে অক্ষম দেখতে পাচ্ছি Please অনুগ্রহ করে পরামর্শ দিন।

আমার কোডটি অনেকটা এরকম:

public class classname1 extends Activity{

  public void onCreate(Bundle savedInstanceState) {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.<view>); 

    //call the <className1> class to execute
  }

  private class classNamename2 extends AsyncTask<String, Void, String>{

    protected String doInBackground(String... params) {}

    protected void onPostExecute(String result){
      if(page.contains("error")) 
      {
        AlertDialog.Builder builder = new AlertDialog.Builder(classname1.this);
        builder.setCancelable(true);
        builder.setMessage("");
        builder.setInverseBackgroundForced(true);
        builder.setNeutralButton("Ok",new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int whichButton){
            dialog.dismiss();
            if(!<condition>)
            {
              try
              {
                String pl = ""; 

                mHelper.<flow>(<class>.this, SKU, RC_REQUEST, 
                  <listener>, pl);
              }

              catch(Exception e)
              {
                e.printStackTrace();
              }
            }  
          }
        });

        builder.show();
      }
    }
  }
}

আমি অন্য সতর্কতায় ত্রুটিটিও দেখেছি যেখানে আমি অন্য কোনওটির কাছে ফরোয়ার্ড করছি না activity। এটি এর মতো সহজ:

AlertDialog.Builder builder = new AlertDialog.Builder(classname1.this);
    builder.setCancelable(true);

    //if successful
    builder.setMessage(" ");
    builder.setInverseBackgroundForced(true);
    builder.setNeutralButton("Ok",new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton){
            // dialog.dismiss();
                   }
    });
    builder.show();
}

2
এটি যদি আপনার সম্পূর্ণ কোড হয় তবে আপনার কি সত্যই অ্যাসিঙ্কটাস্ক দরকার?
শোভিত পুরি

এটি সম্পূর্ণ কোড নয়, এটি বেশ বড় কোড তাই আমি কেবল এখানে অংশটি যুক্ত করেছি যেখানে আমি ক্র্যাশ রিপোর্ট থেকে সমস্যাটি দেখছি
এমএসআইস্লাম

ঠিক আছে, ভালো. সাধারণত আপনি কেবল ফাংশনটির নাম পোস্ট করতে পারেন এবং মন্তব্য করতে পারেন যে আপনি সেখানে গুচ্ছ জিনিসগুলি করছেন (যেমনটি আপনি এখন করেছিলেন)। এটি বুঝতে সহজ। :)।
শোভিত পুরি

আপনি এই ক্রিয়াকলাপ থেকে কোথাও অন্য কোনও ক্রিয়াকলাপে নেভিগেট করছেন?
শোভিত পুরি

1
আপনি লিখেছেন মন্তব্য //send to some other activity। আমি মনে করি আপনি যেখানে নতুন ক্রিয়াকলাপে যাচ্ছেন সেই অংশটি যদি আপনি মন্তব্য করেন তবে এই ত্রুটিটি চলে যাবে। ত্রুটিটি মনে হচ্ছে কারণ আপনার ডায়ালগটি পুরোপুরি খারিজ হয়ে যাওয়ার পরে, আপনার নতুন কার্যকলাপ শুরু হয়। এর মধ্যে onPostExecute()আপনার সতর্কতা সংলাপ রয়েছে এবং আপনি loginক্রিয়াকলাপের প্রসঙ্গটি দিচ্ছেন । তবে আপনি অন্যান্য ক্রিয়াকলাপে নেভিগেট করছেন, সুতরাং প্রসঙ্গটি ভুল হয়ে যায়। সুতরাং আপনি এই ত্রুটি পাচ্ছেন! একই ধরণের প্রশ্ন stackoverflow.com/questions/15104677/… দেখুন ।
শোভিত পুরী

উত্তর:


264
android.view.WindowManager$BadTokenException: Unable to add window"

সমস্যা:

অ্যাপ্লিকেশনটি কোনও ডায়ালগ খোলার মাধ্যমে পটভূমির থ্রেড (অ্যাসিঙ্কটাস্ক) থেকে ব্যবহারকারীকে অবহিত করার চেষ্টা করার সময় এই ব্যতিক্রম ঘটে।

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

কারণ:

এই ব্যতিক্রম হওয়ার কারণটি হ'ল, ব্যতিক্রম বার্তায় যেমন বলা হয়েছে, কার্যকলাপটি শেষ হয়েছে তবে আপনি সমাপ্ত ক্রিয়াকলাপের প্রসঙ্গে একটি কথোপকথন প্রদর্শনের চেষ্টা করছেন। অ্যান্ড্রয়েড রানটাইমটি প্রদর্শনের জন্য ডায়ালগের জন্য কোনও উইন্ডো নেই বলেই এই ব্যতিক্রম ছোঁড়ে।

সমাধান:

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

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

যেমন

private class chkSubscription extends AsyncTask<String, Void, String>{

  private final WeakReference<login> loginActivityWeakRef;

  public chkSubscription (login loginActivity) {
    super();
    this.loginActivityWeakRef= new WeakReference<login >(loginActivity)
  }

  protected String doInBackground(String... params) {
    //web service call
  }

  protected void onPostExecute(String result) {
    if(page.contains("error")) //when not subscribed
    {
      if (loginActivityWeakRef.get() != null && !loginActivityWeakRef.get().isFinishing()) {
        AlertDialog.Builder builder = new AlertDialog.Builder(login.this);
        builder.setCancelable(true);
        builder.setMessage(sucObject);
        builder.setInverseBackgroundForced(true);

        builder.setNeutralButton("Ok",new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int whichButton){
            dialog.dismiss();
          }
        });

        builder.show();
      }
    }
  }
}

হালনাগাদ :

উইন্ডো টোকেন:

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

 একটি বাস্তব-বিশ্বের পরিস্থিতি:

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


এটি অনেক বোঝায়! এছাড়াও আপনার সমাধান আমার কাছে দুর্দান্ত লাগে। (y)
এমএসআইস্লাম

'ফাঁকা চূড়ান্ত ক্ষেত্রের লগইনঅ্যাক্টিভিটি উইকআরফ সম্ভবত আরম্ভ করা হয়নি' বার্তাটি এবং এইভাবে চেষ্টা করা হয়েছে: ব্যক্তিগত চূড়ান্ত WeakReferences <লগিন> লগইনঅ্যাক্টিভিউ উইকআরফ = নতুন WeakReferences <লগিন> (লগইন.থিস); এটি সঠিক জিনিস কিনা তা নিশ্চিত নন
এমএসআইস্লাম

এছাড়াও WeakReferences <লগিন> লগইনঅ্যাক্টিভিটি উইকআরফের আগে ফাইনালটি সরিয়ে দিয়েছিলাম কারণ এটি নির্মাণে ত্রুটি দেখাচ্ছে।
এমএসআইস্লাম

1
নতুন chkCubscript (এটি)। এক্সেকিউট ("") ব্যবহার করার চেষ্টা করুন; নতুন chkCubscription.execute ("") এর পরিবর্তে; আপনি উপরে পোস্ট হিসাবে।
itতেশ গুন

2
ভয়াবহ ত্রুটি !! আমি একটি টিউটোরিয়াল অনুসরণ করছি এবং @ ফিলারোগেনবাক হিসাবে, আমার সমস্যাটি স্টাটএকটিভিটি (...) কল করার ঠিক আগে টোস্ট..শো () কল করার কারণে তৈরি হয়েছিল। এটির সমাধানের জন্য, আমি পরিবর্তে নতুন বলা ক্রিয়াকলাপে টোস্টটি সরিয়েছি!
থিয়েরি

26

আমার ডায়ালগটি ফাংশন দেখাচ্ছে:

void showDialog(){
    new AlertDialog.Builder(MyActivity.this)
    ...
    .show();
}

আমি এই ত্রুটিটি পেয়েছিলাম এবং isFinishing()এই ডায়ালগটি ফাংশন দেখানোর আগে ফোন করার আগে আমাকে যাচাই করতে হবে।

if(!isFinishing())
    showDialog();

1
আমাদের কি লেখা উচিত নয় if(!MyActivity.this.isFinishing())? এটি যদি মাইএকটিভিটিতে ঠিক না থাকে
বিবাসওয়ান বন্দ্যোপাধ্যায়

2
অ্যান্ড্রয়েড যদি ইতিমধ্যে সমাপ্ত হয় তবে কোনও কোড চালাবে কেন? যদি আমরা এই সমাধানটি অনুসরণ করি তবে ভেবে দেখুন যে অনুধাবন সমস্যাগুলি এড়াতে আমাদের সত্যই কত সময় ব্যবহার করা উচিত F ফিনিশিং।
ডেভিড

@ ডেভিড আমি মনে করি এটি একটি কয়েকটি বিবরণ অনুপস্থিত, যেমন একটি ডায়লগটি একটি পটভূমির থ্রেডে ডাকা হচ্ছে, তবে আমি আপনার মতামতটি এখনকার মতো সম্পূর্ণরূপে একমত।
পরিত্যক্ত কার্ট

দারুণ বিষয়, হ্যাকের জন্য আমার কেন পরীক্ষা করা দরকার ফিনিশিং!
চিবিউজে ওপাটা

9

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

যেমন

বরং এই তুলনায়.

AlertDialog alertDialog = new AlertDialog.Builder(this).create();

ব্যবহার করার চেষ্টা করুন

AlertDialog alertDialog = new AlertDialog.Builder(FirstActivity.getInstance()).create();

3
  • প্রথমে আপনি doInBackground কে ওভাররাইড ছাড়াই অ্যাসিঙ্কটাস্ককে প্রসারিত করতে পারবেন না
  • দ্বিতীয়টি বিল্ডার থেকে অল্টারডেইলগ তৈরির চেষ্টা করুন তারপরে শো শো কল করুন ()।

    private boolean visible = false;
    class chkSubscription extends AsyncTask<String, Void, String>
    {
    
        protected void onPostExecute(String result)
        {
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setCancelable(true);
            builder.setMessage(sucObject);
            builder.setInverseBackgroundForced(true);
            builder.setNeutralButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton)
                {
                    dialog.dismiss();
                }
            });
    
            AlertDialog myAlertDialog = builder.create();
            if(visible) myAlertDialog.show();
        }
    
        @Override
        protected String doInBackground(String... arg0)
        {
            // TODO Auto-generated method stub
            return null;
        }
    }
    
    
    @Override
    protected void onResume()
    {
        // TODO Auto-generated method stub
        super.onResume();
        visible = true;
    }
    
    @Override
    protected void onStop()
    {
        visible = false; 
        super.onStop();
    }

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

এই ক্ষেত্রে ব্যবহারকারীর অনপস্টএক্সেকিউট কল হওয়ার আগে আপনার ক্রিয়াকলাপটি প্রস্থান করে, তাই ডায়ালগটি ধরে রাখার জন্য কোনও উইন্ডো নেই এবং এটি আপনার অ্যাপ্লিকেশনটিকে ক্র্যাশ করে। আপনার ক্রিয়াকলাপটি আর দৃশ্যমান নয় কিনা তা জানতে অনটপটে ফ্ল্যাগ যুক্ত করুন ডায়লগটি দেখাবেন না।
মোঃ.সুখনি

onPostExecute আসলে ডাকা হয়ে যায়, কারণ বিল্ডার.শো () একটি শর্তাধীন যখন আমি পরীক্ষা করছি যখন ব্যবহারকারী doInBackground () থেকে ওয়েব পরিষেবা কল ফলাফলের ভিত্তিতে সাবস্ক্রাইব করা হয়নি কিনা। সুতরাং যদি পোস্টপ্যাক্সেকিউট না বলা হয় তবে এটি বিল্ডার.শো () লাইন পর্যন্ত আসতে পারত না।
এমএসআইস্লাম

onPostExecute ডুআইনব্যাকগ্রাউন্ডের পরে ডিফল্টরূপে ডাকা হয়, আপনি এটি কল করতে পারবেন না এবং যা কখনও কার্যকর করা হবে।
মোঃ সুখনি

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

1

আমি ডায়ালগ তৈরি করছি onCreateএবং এর সাথে showএবং ব্যবহার করছি hide। আমার জন্য মূল কারণটি বরখাস্ত হচ্ছিল না onBackPressed, যা Homeক্রিয়াকলাপটি শেষ করছিল ।

@Override
public void onBackPressed() {
new AlertDialog.Builder(this)
                .setTitle("Really Exit?")
                .setMessage("Are you sure you want to exit?")
                .setNegativeButton(android.R.string.no, null)
                .setPositiveButton(android.R.string.yes,
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                Home.this.finish();
                                return;
                            }
                        }).create().show();

আমি onBackPressedআমার কথোপকথনগুলি বন্ধ / খারিজ না করে হোম ক্রিয়াকলাপ শেষ করছি।

আমি যখন আমার সংলাপগুলি বাতিল করে দিয়েছি তখন ক্রাশটি অদৃশ্য হয়ে গেল।

new AlertDialog.Builder(this)
                .setTitle("Really Exit?")
                .setMessage("Are you sure you want to exit?")
                .setNegativeButton(android.R.string.no, null)
                .setPositiveButton(android.R.string.yes,
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                networkErrorDialog.dismiss() ;
                                homeLocationErrorDialog.dismiss() ;
                                currentLocationErrorDialog.dismiss() ;
                                Home.this.finish();
                                return;
                            }
                        }).create().show();

0

আমি এটি সমাধান করার চেষ্টা করি।

 AlertDialog.Builder builder = new AlertDialog.Builder(
                   this);
            builder.setCancelable(true);
            builder.setTitle("Opss!!");

            builder.setMessage("You Don't have anough coins to withdraw. ");
            builder.setMessage("Please read the Withdraw rules.");
            builder.setInverseBackgroundForced(true);
            builder.setPositiveButton("OK",
                    (dialog, which) -> dialog.dismiss());
            builder.create().show();

-1

এটা চেষ্টা কর :

    public class <class> extends Activity{

    private AlertDialog.Builder builder;

    public void onCreate(Bundle savedInstanceState) {
                    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
                    super.onCreate(savedInstanceState);

                setContentView(R.layout.<view>); 

                builder = new AlertDialog.Builder(<class>.this);
                builder.setCancelable(true);
                builder.setMessage(<message>);
                builder.setInverseBackgroundForced(true);

        //call the <className> class to execute
}

    private class <className> extends AsyncTask<String, Void, String>{

    protected String doInBackground(String... params) {

    }
    protected void onPostExecute(String result){
        if(page.contains("error")) //when not subscribed
        {   
           if(builder!=null){
                builder.setNeutralButton("Ok",new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton){
                    dialog.dismiss();
                        if(!<condition>)
                        {
                        try
                        {
                        String pl = ""; 

                        mHelper.<flow>(<class>.this, SKU, RC_REQUEST, 
                        <listener>, pl);
                        }

                        catch(Exception e)
                        {
                        e.printStackTrace();
                        }
                    }  
                }
            });

            builder.show();
        }
    }

}
}

-4

এই গ্লোবাল ভেরিয়েবল আইডিয়া সহ, আমি অনক্রিট () এ মেইনএকটিভিটি উদাহরণ সংরক্ষণ করেছি; অ্যান্ড্রয়েড গ্লোবাল ভেরিয়েবল

public class ApplicationController extends Application {

    public static MainActivity this_MainActivity;
}

এবং এই মত ডায়লগ খুলুন। এটা কাজ করেছে.

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

    // Global Var
    globals = (ApplicationController) this.getApplication();
    globals.this_MainActivity = this;
}

এবং একটি থ্রেডে, আমি এই জাতীয় ডায়ালগ খুলি।

AlertDialog.Builder alert = new AlertDialog.Builder(globals.this_MainActivity);
  1. মেনঅ্যাক্টিভিটি খুলুন
  2. একটি থ্রেড শুরু করুন।
  3. থ্রেড -> কাজ থেকে ডায়ালগ খুলুন।
  4. "পিছনে বোতাম" ক্লিক করুন (অনক্রিট কল করা হবে এবং প্রথমে প্রধান ক্রিয়াকলাপ সরানো হবে)
  5. নতুন মেইনএকটিভিটি শুরু হবে। (এবং এর উদাহরণটি বিশ্বব্যাপী সংরক্ষণ করুন)
  6. প্রথম থ্রেড থেকে ডায়ালগ খুলুন -> এটি খুলবে এবং কাজ করবে।

:)


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