মুক্তির আগে অ্যান্ড্রয়েড অ্যাপ্লিকেশন অনুকূলকরণ [বন্ধ]


120

আমি আমার প্রোগ্রামের দক্ষতা সম্পর্কে একটি " বিশেষ " পরিস্থিতিতে আছি । এখন আমি এমন একটি পর্যায়ে আছি যেখানে আমার অ্যাপ্লিকেশনটির কার্যকারিতা উন্নত করতে এবং ব্যাটারির ব্যবহার হ্রাস করতে হবে

প্রশ্নের আগে:

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

সুতরাং, আপনার অনন্য অপ্টিমাইজিং ট্রিক (গুলি) কী?

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

দয়া করে দুর্দান্ত উত্তরে ভোট দিন কারণ এটি দুর্দান্ত বিকাশকারীদের তাদের জ্ঞান ভাগ করে নিতে উত্সাহিত করবে।


2
যেহেতু শেষ পর্যন্ত দক্ষতা আপনার প্রয়োজন হয় না এমন কিছু না করে আসে (বা আপনার প্রয়োজনের তুলনায় প্রায়শই বেশি) আমি ভাবব যে আপনার অ্যাপ্লিকেশনটি কী ধরণের জিনিসগুলি অর্জন করতে পারে তার উপর অনেক কিছু নির্ভর করবে ... তা উল্লেখ না করে আপনি সমস্ত কি করতে পারেন "স্বাভাবিক সন্দেহভাজন" একটি সংগ্রহ পাবেন
ক্রিস Stratton

1
@ ক্রিস স্ট্রাটন: ঠিক আছে, আপনি ঠিক বলেছেন। তবে এছাড়াও, "সাধারণ সন্দেহভাজন" বা একটি নির্দিষ্ট কৌশল সম্পর্কে সামান্য উত্তর অন্যদের পক্ষে সিদ্ধান্ত নেওয়া আরও সহজ করে দেয় যদি "অনুমান" তারা কী খুঁজছেন (এবং যদি এটি তাদের নির্দিষ্ট পরিস্থিতির জন্য কার্যকর হয়)।
রোকলাই

হাস্যকর কতগুলি সত্যই আকর্ষণীয় প্রশ্ন এই সাইটে বন্ধ হয়ে যায়।
প্যাট্রিক

এই ব্লগপোস্টটি মিডিয়াম.com
বিকাশ করুন

উত্তর:


68

এমন এক পর্যায়ে আপনি এমন পর্যায়ে পৌঁছতে যাচ্ছেন যেখানে পরিচিত কৌশলগুলি তাদের সীমাতে আঘাত করবে। এই মুহুর্তে সর্বোত্তম কাজটি হ'ল আপনার কোডটি প্রোফাইল করা এবং আপনার নির্দিষ্ট প্রয়োজনীয়তার উপর ভিত্তি করে বোতল-ঘাড়গুলি কোন অঞ্চলগুলি তা দেখুন।

এমএটি ব্যবহার করে এবং ট্রেসভিউ ব্যবহার করে র‌্যামের ব্যবহার অনুসন্ধান করা হচ্ছে : আপনার অ্যাপ্লিকেশনটির প্রোফাইল দেওয়ার জন্য কীভাবে সরঞ্জামগুলি ব্যবহার করবেন সে সম্পর্কে একটি নিবন্ধ।


ধন্যবাদ! আমি সম্পদ সহ উত্তরগুলি সত্যিই পছন্দ করি। :-)
রোকলাই

1
এই ব্লগপোস্ট পড়ুন। माध्यम.com
বিকাশ

37

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

এর জন্য আমি সবচেয়ে ভাল সরঞ্জামটি জানি ডিডিএমএসে অন্তর্ভুক্ত বরাদ্দ ট্র্যাকার ।

কেবলমাত্র জিসি ব্যবহারকারীর অভিজ্ঞতার উপর প্রভাব ফেলতে পারে না, তবে অতিরিক্ত অতিরিক্ত বরাদ্দ এবং জিসি কিছু কম্পিউটিং সংস্থান গ্রহণ করে।

এখানে একটি উদাহরণ এবং একটি ছোট কৌশল। আমার অ্যাপ্লিকেশনটিতে আমার কাছে একটি ঘড়ি রয়েছে যা সেকেন্ডের দশম সহ বর্তমান (অডিও) সময় দেখায়। এটি প্রায়শই আপডেট হয়। আপনি যখনই চারসেকেন্স সহ সেটটেক্সট () কল করেন তখন টেক্সটভিউ অভ্যন্তরীণভাবে বরাদ্দগুলি সম্পাদন করে । তবে এটি সেটটেক্সট (চর [] পাঠ্য, ইন স্টার্ট, ইন লেন) ভেরিয়েন্টের সাথে কিছু বরাদ্দ করে না। এটি নথিভুক্ত নয়, এবং আমি যখন এ সম্পর্কে জিজ্ঞাসা করি তখন কেউ উত্তর দেয় না।

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

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


1
দুর্দান্ত উত্তর! কংক্রিট কৌশলগুলি প্রশংসা করা হয়।
রোকলাই

22

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


গা dark় রঙের ন্যায়বিচারের ব্যবহার ব্যাটারির জন্য জয় means
রবার্ট ম্যাসাওলি

7
অন্যদিকে, কালো এলসিডি স্ক্রিনে সাদা থেকে আরও বেশি শক্তি আঁকায়, কারণ আলো (ব্যাকলাইট দ্বারা উত্সাহিত) সাদা থেকে শুরু হয় এবং কালো উত্পাদন করতে সক্রিয়ভাবে অবরুদ্ধ করতে হয়। [ সায়েন্টিফিকেরিকান.আর্টিকাল.সিএফএম? id=fact-or-fiction-black- is ] নীচের লাইন: এই রঙ অপ্টিমাইজেশনে খুব বেশি গণনা করবেন না।
স্পার্কি

16

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

অ্যাপটি চালিত হওয়ার সাথে সাথে আপনাকে এগুলি সব দেখানোর জন্য সেরা সরঞ্জামটি খুঁজে পেয়েছি:

adb shell dumpsys meminfo 'your apps package name'

1
ওহ, এটা নতুন ছিল। ভাগ করে নেওয়ার জন্য ধন্যবাদ!
রোকলাই

15

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


13

কয়েকটি টিপস যা আপনাকে ইউআই এর শর্তে আপনার অ্যাপ্লিকেশনটিকে অনুকূল করতে সহায়তা করতে পারে :

  • convertViewতালিকার অ্যাডাপ্টারগুলির জন্য ব্যবহার করুন - আপনি যদি ভিতরে একটি নতুন দৃষ্টিভঙ্গি তৈরি Adapter.getView()করেন তবে তালিকার প্রতিটি পজিশনের জন্য এই রুটিনটি বলা হয় এটি খুব ব্যয়বহুল । ব্যবহারের convertViewফলে আপনি ইতিমধ্যে নির্মিত ভিউ পুনরায় ব্যবহার করতে পারবেন। অ্যাপিডেমোসে ভাল উদাহরণ (একত্রে ব্যবহারের সাথে ViewHolder) পাওয়া যাবে

  • এটি ঘটতে পারে যে আপনার বিন্যাসগুলি পুরোপুরি অনুকূলিত হয়নি এবং উন্নত করা যেতে পারে (উদাহরণস্বরূপ পিতামাতাকে মার্জ করে বা সরিয়ে দিয়ে)। অ্যান্ড্রয়েড সরঞ্জাম বিন্যাস আপনার জন্য এমন পরিস্থিতি খুঁজে পাবে। এটি পৃথক দৃষ্টিভঙ্গি পরিদর্শন করার জন্য হাইয়ারচিভিউয়ের সাথে ব্যবহার করা যেতে পারে। আরও তথ্য এখানে

  • ব্যাকগ্রাউন্ডটি আঁকতে সক্ষম অপসারণ করুন - অ্যান্ড্রয়েড কাঠামোটি ব্যবহৃত হয়েছে (এটি এখনও রয়েছে?) কী ভিউ আঁকতে হবে তা সনাক্ত করতে সমস্যা রয়েছে। আপনার (ডিফল্ট) ব্যাকগ্রাউন্ডের অঙ্কনযোগ্য অঙ্কনটি পরবর্তীকালে আপনার অস্বচ্ছ ইউআই দ্বারা গোপন করার জন্য আঁকা হবে এমন একটি সুযোগ রয়েছে। এই অপব্যয়যুক্ত অঙ্কন থেকে মুক্তি পেতে ব্যাকগ্রাউন্ডের আঁকতে সক্ষম সরান।

এটি একটি কাস্টম স্টাইল ব্যবহার করে করা যেতে পারে

<resources>
    <style name="Theme.NoBackground" parent="android:Theme">
        <item name="android:windowBackground">@null</item>
    </style>
</resources>

কিছু টিপস যা আপনাকে ব্যাটারি ব্যবহারের ক্ষেত্রে আপনার অ্যাপ্লিকেশনটিকে অনুকূল করতে সহায়তা করতে পারে :

  • নেটওয়ার্কিংয়ের ধরনটি পরীক্ষা করে দেখুন এবং ব্যবহারকারীরা ওয়াইফাই বা 3 জি (এবং রোমিং নয়) দিয়ে এলাকায় পৌঁছা পর্যন্ত অপেক্ষা করুন এবং তারপরেই তাকে সংযোগ ব্যবহারের অনুমতি দিন

  • ডাউনলোড এবং পার্সিংয়ের গতি বাড়ানোর জন্য যখনই সম্ভব টেক্সটুয়াল ডেটার জন্য জিজিপ ব্যবহার করুন

  • জটিল জাভা অবজেক্টগুলি যেমন XmlPullParserFactory/ BitmapFactory/ StringBuilder/ Matcherইত্যাদি পুনর্ব্যবহার করুন

আরও ব্যাটারির কৌশলগুলির জন্য লাইফের জন্য কোডিং দেখুন - ব্যাটারি লাইফ, এটি


"জটিল জাভা বস্তুর পুনর্ব্যবহার করুন ..." কীভাবে? যখন জাভাতে জিসি আছে
ইউশা আলেয়ুব

9

কিছু চিন্তা করার জন্য: স্ট্রিংকে অতিরিক্ত ব্যবহার করবেন না, উদাহরণস্বরূপ একটি বিশাল লুপে। এটি প্রচুর স্ট্রিং অবজেক্ট তৈরি করবে যা GC'ed করতে হবে। "খারাপ কোডিং" উদাহরণটি প্রতিটি লুপটিতে 2 টি স্ট্রিং অবজেক্ট তৈরি করে। পরবর্তী উদাহরণটি কেবল একটি চূড়ান্ত স্ট্রিং এবং একটি একক স্ট্রিংবিল্ডার তৈরি করবে। গতির জন্য বিশাল লুপগুলি অনুকূলকরণ করার সময় এটি একটি বিশাল পার্থক্য করে। আমার ওয়ার্ডলিস্ট প্রো অ্যান্ড্রয়েড অ্যাপ্লিকেশন তৈরি করার সময় আমি স্ট্রিংবিল্ডারকে প্রচুর ব্যবহার করেছি এবং অকারণে 270000 শব্দের মধ্য দিয়ে যাবার সময় এটি খুব দ্রুত হয়ে যায়।

    //Bad coding:
    String s = "";
    for(int i=0;i<999999;i++){
        s = "Number=";
        s = s + i;
        System.out.println(s);
    }

    //Better coding
    final String txt = "Number=";
    StringBuilder sb = new StringBuilder();
    for(int i=0;i < 999999;i++){
        sb.setLength(0);
        sb.append(txt);
        sb.append(i);
        System.out.println(sb);
    }

আমি বিষয়টি সম্পর্কে আরও বর্ধিত ব্লগপোস্ট লিখেছি। এখানে পড়ুন


6

আমার ধারণা অনুমান যে যেখানেই সম্ভব "চূড়ান্ত" ভেরিয়েবলগুলি ব্যবহার করা কার্যকর করার গতি উন্নত করতে পারে।


1
আমার মনে আছে পড়ছি যে কোথাও, আপনি একটি লিঙ্ক সরবরাহ করতে পারেন?
ওয়েসলি উইজার

1
চূড়ান্ত ভেরিয়েবলের ক্ষেত্রে এটি ঠিক সত্য, তবে স্থির চূড়ান্ত ভেরিয়েবলগুলির জন্য হতে পারে - দেখুন স্ট্যাকওভারফ্লো
অ্যালিস্টায়ার কলিন্স

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

2
চূড়ান্ত ভেরিয়েবল কোডকে আরও দক্ষ করে তুলতে পারে কারণ এর অর্থ হ'ল সমস্ত পদার্থ একই রানে GC'd হবে। আপনি কখন এগুলি বাতিল করবেন তার উপর ভিত্তি করে বিভিন্ন সময়ে নয়।
রবার্ট ম্যাসাওলি

1
প্রশ্ন: সংকলক স্পষ্টভাবে এটি আপনার জন্য করে না? আমি মনে করি এটির কোড বিশ্লেষণ পর্যায়ে এটি করা উচিত।
পবন

6

আপনার পিএনজি ছবিগুলি এপিপি আকার থেকে কিছু (কিলো) বাইট ছাঁটাই করতে অপটিপিএনজি এবং পিএনজি ক্রাশের মতো সরঞ্জামগুলি দিয়ে অনুকূলিত করুন । ওয়েবসাইটগুলির জন্য চিত্র অপ্টিমাইজেশান টিপসগুলি এখানেও প্রয়োগ হয়: উপযুক্ত চিত্রের ফর্ম্যাটগুলি ব্যবহার করুন, জেপিজি সংকোচনের সাথে খেলুন, 8-বিট ট্রান্সপারেন্সির পরিবর্তে বাইনারি ট্রান্সপোর্টারিজগুলি ব্যবহার বিবেচনা করুন ইত্যাদি

আপনি যদি আলফা চ্যানেলের সাহায্যে বড় বড় পিএনজিগুলি চালনা করেন তবে আপনি স্টার্টআপ গতির জন্য কিছু APK আকারের বাণিজ্য করতে পারবেন এবং আরজিবি এবং এ চ্যানেলের জন্য পৃথক জেপিজি ব্যবহার করতে পারেন

আপনি যদি HTTP সংযোগগুলি তৈরি করে থাকেন তবে আপনার HTTP ক্লায়েন্টটি সামগ্রী সংকোচনের ব্যবহার করে তা পরীক্ষা করে দেখুন। যদি এটি HTTP প্রতিক্রিয়া পেয়েছে তবে এটি ক্যাচ-সম্পর্কিত HTTP শিরোনামগুলি সঠিকভাবে বোঝে এবং ব্যবহার করে তা পরীক্ষা করুন।


অন্তর্দৃষ্টি জন্য ধন্যবাদ! আমি এই সম্পর্কে শুনিনি!
রোকলাই

5

আপনার যদি নেটওয়ার্ক অপারেশনগুলি থাকে তবে একই httpclient উদাহরণটি পুনরায় ব্যবহার করার চেষ্টা করুন। নিয়মিত ভাব প্রকাশ করা এড়িয়ে চলুন।


কারণ? আপনি ব্যাখ্যা করতে পারেন কেন?
ইউশা আলেয়াউব

5

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

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



4

আপনি যদি ট্যাগগুলির মধ্যে পাঠ্য পেতে স্ট্রিং ম্যানিপুলেশন রুটিনগুলি ব্যবহার করে আপনার এক্সএমএল ইনপুট পার্স করতে পারেন তবে এক্সপথ ব্যবহার থেকে বিরত থাকুন। আমি এইচটিসি ডিজায়ার 50000 আইটেম ডেটা সেট করে এই ক্ষেত্রে 10x উন্নতি পরীক্ষা করেছি এবং নিশ্চিত করতে পারি।


3

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

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

..হালনাগাদ হবে..

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