বাংলায় অ্যান্ড্রয়েড সহায়িকা - Bangla Android Guide

কনফিগারেশন পরিবর্তন ব্যবস্থাপনা

রানটাইম কনফিগারেশন পরিবর্তন, যেমন একটি স্ক্রিন ওরিয়েন্টেশন পরিবর্তন, অ্যান্ড্রয়েডকে নতুন কনফিগারেশন দিয়ে একটি চলমান একটিভিটিকে ধ্বংস বা রিস্টার্ট করায় (এই আচরন সম্পর্কে আরও জানতে Handling Runtime Changes: http://developer.android.com/guide/topics/resources/runtime-changes.html দেখুন)। আপনি পূনরায় আপনার সকল ইমেজ প্রসেস হওয়াকে পরিহার করতে চাইতে পারেন যাতে ইউজারের একটি স্বচ্ছন্দ এবং গতিময় এক্সপেরিয়েন্স থাকে যখন একটি কনফিগারেশন ঘটে থাকে।

সৌভাগ্যবশত, আপনার বিটম্যাপের একটি সুন্দর মেমরী ক্যাশে আছে যা আপনি Use a Memory Cache সেকশনে তৈরী করেছেন। এই ক্যাশে একটি Fragment যা setRetainInstance(true) কল করার মাধ্যমে সংরক্ষিত তা ব্যবহার করে একটি নতুন একটিভিটিতে পাস হতে পারে । একটিভিটিটি পূনুনুর্মত হওয়ার পরে, এই রক্ষিত Fragment পূনরায় অ্যাটাচ করা হয় এবং আপনি বিদ্যমান ক্যাশে অবজেক্টে প্রবেশগম্যতা পাবেন, ইমেজকে ImageView অবজেক্টের মধ্যে দ্রুত সংগ্রহিত এবং রি-পপুলেট হতে অনুমোদন করে।

এখানে একটি Fragment ব্যবহার করে কনফিগারেশন পরিবর্তন জুরে একটি LruCache অবজেক্ট ধরে রাখার উদাহরণ আছে:

private LruCache<String, Bitmap> mMemoryCache;

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    RetainFragment retainFragment =
            RetainFragment.findOrCreateRetainFragment(getFragmentManager());
    mMemoryCache = retainFragment.mRetainedCache;
    if (mMemoryCache == null) {
        mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {
            ... // Initialize cache here as usual
        }
        retainFragment.mRetainedCache = mMemoryCache;
    }
    ...
}

class RetainFragment extends Fragment {
    private static final String TAG = "RetainFragment";
    public LruCache<String, Bitmap> mRetainedCache;

    public RetainFragment() {}

    public static RetainFragment findOrCreateRetainFragment(FragmentManager fm) {
        RetainFragment fragment = (RetainFragment) fm.findFragmentByTag(TAG);
        if (fragment == null) {
            fragment = new RetainFragment();
            fm.beginTransaction().add(fragment, TAG).commit();
        }
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }
}

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