অ্যান্ড্রয়েড অ্যাপ্লিকেশনটি মেমরির সমস্যার বাইরে রয়েছে - সমস্ত কিছু চেষ্টা করেও ক্ষতিতে রয়েছে


87

আমি যে অ্যাপ্লিকেশনটি বিকাশ করছি তার মেমরি ফাঁস বের করার জন্য আমি পুরো 4 দিন চেষ্টা করে কাটিয়েছি, তবে জিনিসগুলি দীর্ঘদিন আগে বোঝা বন্ধ করে দিয়েছে।

আমি যে অ্যাপ্লিকেশনটি বিকাশ করছি তা সামাজিক প্রকৃতির, সুতরাং প্রোফাইল ক্রিয়াকলাপগুলি (পি) ভাবেন এবং ডেটা সহ ক্রিয়াকলাপগুলি তালিকাভুক্ত করুন - উদাহরণস্বরূপ ব্যাজ (বি)। আপনি প্রোফাইল থেকে একটি ব্যাজ তালিকার জন্য অন্য প্রোফাইলগুলিতে, অন্যান্য তালিকাগুলিতে হ্যাপ করতে পারেন etc.

সুতরাং এই পি 1 -> বি 1 -> পি 2 -> বি 2 -> পি 3 -> বি 3 ইত্যাদির মতো কোনও প্রবাহের কল্পনা করুন, ধারাবাহিকতার জন্য, আমি একই ব্যবহারকারীর প্রোফাইল এবং ব্যাজ লোড করছি, সুতরাং প্রতিটি পি পৃষ্ঠাটি একই এবং একই রকম প্রতিটি বি পৃষ্ঠা।

সমস্যার সাধারণ বক্তব্যটি হ'ল: প্রতিটি পৃষ্ঠার আকারের উপর নির্ভর করে কিছুটা নেভিগেট করার পরে, আমি এলোমেলো জায়গায় - বিটম্যাপস, স্ট্রিংস ইত্যাদিতে একটি মেমরির একটি ব্যতিক্রম পাই it এটি সামঞ্জস্যপূর্ণ বলে মনে হয় না।

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

এটি একা ছেড়ে দাও - যদিও আমি পি 1 -> বি 1 -> পিছনে -> বি 1 -> পিছনে -> বি 1 করি, তবুও আমি ক্রাশ পেয়েছি। এটি কোনও ধরণের মেমরি ফাঁস ইঙ্গিত করে, তবুও এইচপিআরফ ডাম্প করার পরে এবং এমএটি এবং জেপ্রোফিলার ব্যবহার করার পরেও আমি এটি চিহ্নিত করতে পারি না।

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

ব্যাজ পেজ, ওয়েব থেকে ডেটা পেতে একটি BaseAdapter থেকে EntityData একটি অ্যারের মধ্যে এটি লোড এবং ListView (আমি আসলে CommonsWare এর ব্যবহার করছি তা ভোজন চমৎকার MergeAdapter , কিন্তু এই ব্যাজ কার্যকলাপ, সত্যিই শুধুমাত্র 1 অ্যাডাপ্টারের যাহাই হউক না কেন, কিন্তু আমি এই ঘটনাটি যেভাবেই উল্লেখ করতে চেয়েছিলেন)।

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

আমি এখনও বুঝতে পারি না যে স্ট্যাকের মধ্যে থাকা নিষ্ক্রিয় ক্রিয়াকলাপ কেন কাটা হয় না, এবং আমি এটি খুঁজে পেতে সত্যিই পছন্দ করব।

এই মুহুর্তে, আমি কোনও ইঙ্গিত, পরামর্শ, সমাধান ... যে কোনও কিছু সাহায্য করতে পারে তার সন্ধান করছি।

ধন্যবাদ.


সুতরাং, আমি যদি গত 20 সেকেন্ডে 15 টি ক্রিয়াকলাপ খুলে ফেলেছি (ব্যবহারকারী খুব দ্রুত এগিয়ে চলেছে), সমস্যা কি হতে পারে? ক্রিয়াকলাপটি প্রদর্শিত হওয়ার পরে সাফ করার জন্য আমার কোন লাইনের কোড যুক্ত করা উচিত? আমি একটি outOfMemoryত্রুটি পেয়েছি । ধন্যবাদ!
রুচির বড়োনিয়া

উত্তর:


109

আমি এখনও বুঝতে পারি না যে স্ট্যাকের মধ্যে থাকা নিষ্ক্রিয় ক্রিয়াকলাপ কেন কাটা হয় না, এবং আমি এটি খুঁজে পেতে সত্যিই পছন্দ করব।

জিনিসগুলি এইভাবে কাজ করে না। একমাত্র মেমরি পরিচালনা যা ক্রিয়াকলাপের জীবনচক্রকে প্রভাবিত করে তা হ'ল সমস্ত প্রক্রিয়া জুড়ে গ্লোবাল মেমরি, কারণ অ্যান্ড্রয়েড সিদ্ধান্ত নিয়েছে যে এটি মেমরির কম চলছে এবং কিছুটা ফিরে পাওয়ার জন্য ব্যাকগ্রাউন্ড প্রক্রিয়াগুলি মেরে ফেলতে হবে।

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

সুতরাং এটি আমার কাছে মনে হয় আপনার মূল সমস্যাটি হ'ল: আপনি একই সাথে প্রচুর ক্রিয়াকলাপ চালিয়ে দিচ্ছেন, এবং / বা activities সমস্ত ক্রিয়াকলাপ অনেকগুলি সংস্থান করে।

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

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

এখন, আপনি যেখানে প্রবাহে ক্রাশ করছেন যেখানে আপনি পিছনে চাপছেন, কোনও ক্রিয়াকলাপে যান, ফিরে টিপুন, অন্য কোনও ক্রিয়াকলাপে যান ইত্যাদি etc এই ব্লগ পোস্টটি কীভাবে ফাঁস ডিবাগ করবেন তা বর্ণনা করে: http://android-developers.blogspot.com/2011/03/mmory-analysis-for-android.html


47
ওপি'র প্রতিরক্ষা ক্ষেত্রে, ডকুমেন্টেশনের পরামর্শ অনুসারে এটি নয়। বিকাশকারী.অ্যান্ড্রয়েড. com/guide/topics/fundamentals/… উদ্ধৃতি ("যখন কোনও ক্রিয়াকলাপ বন্ধ হয়ে যায়), তখন এটি ব্যবহারকারীর কাছে আর দৃশ্যমান হয় না এবং মেমরির অন্য কোথাও প্রয়োজন হলে এটি সিস্টেম দ্বারা হত্যা করা যেতে পারে।" "যদি কোনও ক্রিয়াকলাপ বিরতি দেওয়া হয় বা বন্ধ হয়ে যায়, সিস্টেমটি এটিকে মেমরি থেকে ফেলে দিতে পারে ... এটি সমাপ্ত করতে বলার মাধ্যমে (তার ফিনিস () পদ্ধতিটি কল করে)" "(onDestroy () বলা হয়) কারণ সিস্টেমটি সাময়িকভাবে এই উদাহরণটিকে ধ্বংস করে দিচ্ছে স্থান বাঁচানোর জন্য ক্রিয়াকলাপ।
কমন্সওয়্যার

42
একই পৃষ্ঠায়, "যাইহোক, যখন সিস্টেম স্মৃতি পুনরুদ্ধার করতে কোনও ক্রিয়াকলাপ ধ্বংস করে"। আপনি যেটি ইঙ্গিত করছেন তা হ'ল অ্যান্ড্রয়েড কখনই মেমরির দাবিদার করতে ক্রিয়াকলাপগুলিকে ধ্বংস করে না , তবে কেবল এটি করার প্রক্রিয়াটি শেষ করবে। যদি তা হয় তবে এই পৃষ্ঠার একটি গুরুতর পুনর্লিখনের প্রয়োজন, কারণ এটি বারবার পরামর্শ দেয় যে অ্যান্ড্রয়েড স্মৃতি পুনরায় দাবি করতে কোনও ক্রিয়াকলাপ ধ্বংস করবে । এছাড়াও লক্ষ করুন যে উদ্ধৃত প্যাসেজগুলির Activityঅনেকগুলি জাভাডক্সেও বিদ্যমান ।
কমন্সওয়্যার

6
আমি ভেবেছিলাম আমি এটি এখানে রেখেছি, তবে আমি এটির
জাস্টিন

15
এটি ২০১৩ এর এবং ডক্সটি কেবলমাত্র আরও স্পষ্টভাবে মিথ্যা পয়েন্টটি উপস্থাপন করতে এসেছে: " ডেভেলপার.অ্যান্ড্রয়েড / ট্রেনিং / বেসিকস / অ্যাক্টিভিটি- লাইফেসাইকেল_… ," একবার আপনার ক্রিয়াকলাপ বন্ধ হয়ে গেলে সিস্টেমটি পুনরুদ্ধার করার প্রয়োজন হলে দৃষ্টান্তটি নষ্ট করে দিতে পারে সিস্টেমের মেমোরি। সুনির্দিষ্ট ক্ষেত্রে, সিস্টেমটি কেবল আপনার অ্যাপ্লিকেশন প্রক্রিয়াটিকে হত্যা করতে পারে "
কায়ে

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

22

কিছু টিপস:

  1. নিশ্চিত করুন যে আপনি কার্যকলাপ প্রসঙ্গে ফাঁস করছেন না।

  2. আপনি বিটম্যাপে রেফারেন্স রাখছেন না তা নিশ্চিত করুন। ক্রিয়াকলাপ # অনটপগুলিতে আপনার সমস্ত চিত্রভিউ এর সমস্ত কিছু পরিষ্কার করুন:

    Drawable d = imageView.getDrawable();  
    if (d != null) d.setCallback(null);  
    imageView.setImageDrawable(null);  
    imageView.setBackgroundDrawable(null);
    
  3. আপনার আর প্রয়োজন না হলে বিটম্যাপগুলি পুনরায় সাইকেল করুন।

  4. আপনি যদি মেমোরি- lru এর মতো মেমরি ক্যাশে ব্যবহার করেন তবে নিশ্চিত হয়ে নিন যে এটি খুব বেশি স্মৃতিতে ব্যবহার করছে না।

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

  6. অ্যান্ড্রয়েড ৪.২-এ, হার্ডওয়্যার ত্বরণ সহ একটি বাগ (স্ট্যাকওভারফ্লো # 13754876) রয়েছে, তাই আপনি hardwareAccelerated=trueযদি আপনার ম্যানিফেস্টে ব্যবহার করেন এটি মেমরি ফাঁস করবে। GLES20DisplayList- আপনি পদক্ষেপ (২) করেছেন এবং অন্য কেউ এই বিটম্যাপটিতে উল্লেখ না করে থাকলেও রেফারেন্স ধরে রাখুন। এখানে আপনার প্রয়োজন:

    ক) এপিআই 16/17 এর জন্য হার্ডওয়্যার ত্বরণকে অক্ষম করুন;
    বা
    খ) বিটম্যাপটি ধারণ করে দেখুন det

  7. Android এর জন্য 3+ আপনি ব্যবহার করার চেষ্টা করতে পারেন android:largeHeap="true"আপনার AndroidManifest। তবে এটি আপনার স্মৃতি সমস্যার সমাধান করবে না, কেবল তাদের স্থগিত করুন।

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

  9. আপনার স্মৃতিশক্তি ফাঁসের কারণটি জানতে মেমরি বিশ্লেষকটি ব্যবহার করুন। গুগল আই / ও ২০১১ এর
    খুব ভাল ভিডিও এখানে রয়েছে : অ্যান্ড্রয়েড অ্যাপসের জন্য মেমরি পরিচালনা
    আপনি যদি বিটম্যাপ নিয়ে কাজ করেন তবে এটি অবশ্যই পড়া উচিত: বিটম্যাপগুলি দক্ষতার সাথে প্রদর্শন করা


সুতরাং, আমি যদি গত 20 সেকেন্ডে 15 টি ক্রিয়াকলাপ খুলে ফেলেছি (ব্যবহারকারী খুব দ্রুত এগিয়ে চলেছে), সমস্যা কি হতে পারে? ক্রিয়াকলাপটি প্রদর্শিত হওয়ার পরে সাফ করার জন্য আমার কোন লাইনের কোড যুক্ত করা উচিত? আমি একটি outOfMemoryত্রুটি পেয়েছি । ধন্যবাদ!
রুচির বড়োনিয়া

4

বিটম্যাপগুলি প্রায়শই অ্যান্ড্রয়েডে মেমরির ত্রুটির জন্য দোষী হয়, তাই ডাবল চেক করার জন্য এটি ভাল অঞ্চল।


সুতরাং, আমি যদি গত 20 সেকেন্ডে 15 টি ক্রিয়াকলাপ খুলে ফেলেছি (ব্যবহারকারী খুব দ্রুত এগিয়ে চলেছে), সমস্যা কি হতে পারে? ক্রিয়াকলাপটি প্রদর্শিত হওয়ার পরে সাফ করার জন্য আমার কোন লাইনের কোড যুক্ত করা উচিত? আমি একটি outOfMemoryত্রুটি পেয়েছি । ধন্যবাদ!
রুচির বড়োনিয়া

2

আপনি কি প্রতিটি ক্রিয়াকলাপের জন্য কিছু রেফারেন্স রাখছেন? আফাইক এটি একটি কারণ যা অ্যান্ড্রয়েডকে স্ট্যাক থেকে ক্রিয়াকলাপ মোছা থেকে রক্ষা করে।

আমরা কি অন্যান্য ত্রুটিগুলিতেও এই ত্রুটিটি পুনরুত্পাদন করতে সক্ষম? আমি রম এবং / অথবা হার্ডওয়্যার প্রস্তুতকারকের উপর নির্ভর করে কিছু অ্যান্ড্রয়েড ডিভাইসের কিছু অদ্ভুত আচরণের অভিজ্ঞতা পেয়েছি।


আমি এটিকে একটি ড্রয়েড চলমান সিএম 7 এ সর্বাধিক হ্যাপ সেট 16 এমবিতে প্রজনন করতে সক্ষম হয়েছি যা আমি এমুলেটরটিতে পরীক্ষা করছি একই মান।
আর্টেম রাশাকোভস্কিই

আপনি কিছু হতে পারে. যখন ২ য় ক্রিয়াকলাপ শুরু হবে, তখন প্রথম জন কি অন পজ-> অনস্টপ বা কেবল অনপেজ করবে? কারণ আমি সমস্ত ******* লাইফাইসাইকেল কলগুলিতে মুদ্রণ করছি এবং আমি অনসটপ ছাড়াই পজ -> অনক্রিট দেখছি। এবং একটি ক্র্যাশ ডাম্প আসলে অনপস = সত্য বা অনস্পট = এর মতো 3 টি কার্যকলাপের জন্য মিথ্যা বলেছিল যা এটি হত্যা করছিল।
আর্টেম রাশাকোভস্কিই

ক্রিয়াকলাপটি স্ক্রিনটি ছেড়ে গেলে অনস্টপকে কল করা উচিত তবে এটি যদি সিস্টেমটি প্রথম দিকে পুনরুদ্ধার করে তা নাও হতে পারে।
শে

এটি পুনরুদ্ধার করা হবে না কারণ আমি অনক্রিট এবং অন-রিস্টোরইনস্ট্যান্স স্টেট দেখতে পাচ্ছি না যদি আমি ফিরে ক্লিক করি।
আর্টেম রাশাকোভস্কিই

জীবনচক্র অনুসারে এগুলি কখনই বলা যায় না, আমার উত্তরটি যা অফিসিয়াল বিকাশকারী ব্লগের সাথে একটি লিঙ্কযুক্ত আছে তা পরীক্ষা করুন, সম্ভবত আপনি যেভাবে আপনার বিটম্যাপগুলি পাশ করছেন
ডেটেন

2

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

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

সম্পাদনা: আমি যেমন এটি বুঝতে পারি, অ্যান্ড্রয়েড স্বয়ংক্রিয়ভাবে প্রয়োজন অনুসারে অনপজ এবং অন স্টপকে ডেকে আনে। পদ্ধতিগুলি আপনার ওভারাইড করার জন্য রয়েছে যাতে হোস্টিং প্রক্রিয়া বন্ধ হওয়ার আগে আপনার কী প্রয়োজন তা যত্ন নিতে পারেন (ভেরিয়েবলগুলি সংরক্ষণ করা, ম্যানুয়ালি রাষ্ট্র সংরক্ষণ ইত্যাদি); তবে মনে রাখবেন যে এটি স্পষ্টভাবেই বলা হয়েছে যে অনস্টপ (অনডেট্রয়ের সাথে) প্রতিটি ক্ষেত্রেই ডাকা যাবে না । তদতিরিক্ত, যদি হোস্টিং প্রক্রিয়াটি কোনও ক্রিয়াকলাপ, পরিষেবা, ইত্যাদির হোস্টিংও করে যা "ফোরগ্রাউন্ড" বা "দৃশ্যমান" স্থিতি রয়েছে, তবে ওএস প্রক্রিয়া / থ্রেড বন্ধ করার দিকেও তাকাতে পারে না। উদাহরণস্বরূপ: একটি ক্রিয়াকলাপ এবং পরিষেবা উভয়ই একই প্রক্রিয়াতে লাউঞ্চ হয় এবং পরিষেবাটি START_STICKYসেখান থেকে ফিরে আসেonStartCommand()প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে কমপক্ষে একটি দৃশ্যমান স্থিতি নেয়। এটিই এখানে মূল কী হতে পারে, ক্রিয়াকলাপের জন্য একটি নতুন প্রকার ঘোষণার চেষ্টা করুন এবং দেখুন যে এটি কোনও পরিবর্তন করে কিনা। ম্যানিফেস্টে আপনার ক্রিয়াকলাপের ঘোষণার সাথে এই লাইনটি যুক্ত করার চেষ্টা করুন: android:process=":proc2"এবং তারপরে আপনার ক্রিয়াকলাপ অন্য কোনও কিছুর সাথে কোনও প্রক্রিয়া ভাগ করে নিলে আবার পরীক্ষা চালান। এখানে চিন্তাভাবনাটি হ'ল যদি আপনি নিজের কার্যকলাপটি পরিষ্কার করে ফেলেছেন এবং সমস্যাটি আপনার ক্রিয়াকলাপ নয় বলে পুরোপুরি নিশ্চিত হন তবে অন্য কিছু হ'ল সমস্যা এবং তার জন্য শিকার করার সময়।

এছাড়াও, আমি এটি কোথায় দেখতে পেয়েছি তা মনে করতে পারছি না (যদি আমি এটি অ্যান্ড্রয়েড ডক্সেও দেখে থাকি) তবে আমার মনে আছে PendingIntentকোনও কার্যকলাপের রেফারেন্স সম্পর্কে এমন কিছু কিছু ঘটায় যাতে কার্যকলাপটি এইভাবে আচরণ করতে পারে।

onStartCommand()প্রক্রিয়াটি অ-হত্যার সামনের দিকে অন্তর্দৃষ্টি সহ পৃষ্ঠার লিঙ্কটি এখানে


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

1

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


1

আমি খুঁজে পেয়েছি মেমরি ফাঁসের বৃহত্তম উত্সটি কিছু বৈশ্বিক, উচ্চ স্তরের বা প্রসঙ্গের দীর্ঘস্থায়ী উল্লেখের কারণে ঘটেছিল। আপনি যদি কোনও ভেরিয়েবলের মধ্যে "প্রসঙ্গ" সঞ্চিত রাখেন তবে আপনার অবিশ্বাস্য মেমরি ফাঁস হতে পারে।


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

4
আমার ক্ষেত্রে এটি শ্রেণিক স্তরের যে কোনও ভেরিয়েবলকে অনুবাদ করা হয়েছে যা প্রসঙ্গের সমান সেট করা হয়েছিল (যেমন Class1.variable = getContext ();)) সাধারণভাবে, "অ্যাপ্লিকেশন" এর প্রতিটি ব্যবহারের পরিবর্তে আমার অ্যাপ্লিকেশনটিতে "getContext" বা অনুরূপ আমার বৃহত্তম স্মৃতি সমস্যার সমাধান করে একটি নতুন কল দিয়ে cing তবে আমার অবস্থা অস্থির এবং ভুল ছিল, আপনার ক্ষেত্রে এর আগে অনুমানযোগ্য ছিল না, সম্ভবত অন্যরকম কিছু আলাদা।
D2TheC

1

প্রসঙ্গের প্রয়োজন এমন যে কোনও কিছুতে getApplicationContext () পাশ করার চেষ্টা করুন। আপনার কাছে একটি বিশ্বব্যাপী পরিবর্তনশীল থাকতে পারে যা আপনার ক্রিয়াকলাপগুলির জন্য একটি রেফারেন্স রাখে এবং তাদের আবর্জনা সংগ্রহ হতে আটকাচ্ছেন।


1

আমার ক্ষেত্রে মেমরির ইস্যুটিকে সত্যই সহায়তা করেছিল এমন একটি জিনিস আমার বিটম্যাপসের জন্য সত্য হিসাবে সেট করা শেষ হয়েছিল। দেখুন কেন আমি কখনই বিটম্যাপফ্যাক্ট্রির ইনপ্রিজটেবল বিকল্পটি ব্যবহার করব না? এবং আরও তথ্যের জন্য উত্তরের আলোচনা।

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


আমি জানি এটি একটি পুরানো বিষয় তবে আমি দেখতে অনেকগুলি অনুসন্ধানে এই থ্রেডটি খুঁজে পেয়েছি। আমি একটি দুর্দান্ত টিউটোরিয়ালটি লিঙ্ক করতে চাই যেখানে আমি এখান থেকে খুব বেশি শিখতে পেরেছি যা থেকে আপনি এখানে পেতে পারেন: developer.android.com/training/displaying-bitmaps/index.html
17:53

0

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

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