এটি অর্জনের জন্য সর্বাধিক সাধারণ পদ্ধতির সংকলন :
- অভিপ্রায়টির মধ্যে ডেটা প্রেরণ করুন
- স্থির ক্ষেত্র
- এর হ্যাশম্যাপ
WeakReferences
- অবজেক্ট অবজেক্টস (স্ক্লাইট, শেয়ারের পছন্দসমূহ, ফাইল ইত্যাদি)
টিএল; ডিআর : ডেটা ভাগ করার দুটি উপায় রয়েছে: উদ্দেশ্যটির অতিরিক্তগুলিতে ডেটা পাস করা বা অন্য কোথাও সংরক্ষণ করা। যদি ডেটা আদিম, স্ট্রিংস বা ব্যবহারকারী-সংজ্ঞায়িত অবজেক্টস হয়: অভিপ্রায় অতিরিক্তগুলির অংশ হিসাবে এটি প্রেরণ করুন (ব্যবহারকারী-সংজ্ঞায়িত অবজেক্টগুলি অবশ্যই প্রয়োগ করতে হবে Parcelable
)। জটিল অবজেক্টগুলি পাস করা যদি অন্য কোথাও সিঙ্গলটনে একটি উদাহরণ সংরক্ষণ করে এবং চালু হওয়া ক্রিয়াকলাপ থেকে সেগুলিতে অ্যাক্সেস করে।
প্রতিটি পদ্ধতির কীভাবে এবং কেন প্রয়োগ করা যায় তার কয়েকটি উদাহরণ:
ইন্টেন্টের ভিতরে ডেটা প্রেরণ করুন
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("some_key", value);
intent.putExtra("some_other_key", "a value");
startActivity(intent);
দ্বিতীয় ক্রিয়াকলাপে:
Bundle bundle = getIntent().getExtras();
int value = bundle.getInt("some_key");
String value2 = bundle.getString("some_other_key");
আপনি যদি প্রাথমিক তথ্য বা স্ট্রিংগুলি অতিক্রম করে থাকেন তবে এই পদ্ধতিটি ব্যবহার করুন । আপনি প্রয়োগকারী বস্তুগুলিও পাস করতে পারেন Serializable
।
প্রলুব্ধকর হলেও, ব্যবহারের আগে আপনার দু'বার চিন্তা করা উচিত Serializable
: এটি ত্রুটিযুক্ত এবং ভয়াবহভাবে ধীরে ধীরে। সুতরাং সাধারণভাবে: সম্ভব হলে দূরে থাকুনSerializable
। আপনি যদি জটিল ব্যবহারকারী-সংজ্ঞায়িত অবজেক্টগুলি পাস করতে চান তবে Parcelable
ইন্টারফেসটি একবার দেখুন । এটি কার্যকর করা আরও শক্ত, তবে এর তুলনায় এটির যথেষ্ট গতি লাভ রয়েছে Serializable
।
ডিস্কে স্থির না হয়ে ডেটা ভাগ করুন
ক্রিয়াকলাপের মধ্যে মেমোরিতে সংরক্ষণ করে ক্রিয়াকলাপগুলির মধ্যে ডেটা ভাগ করা সম্ভব যে বেশিরভাগ ক্ষেত্রে উভয় ক্রিয়াকলাপ একই প্রক্রিয়াতে চলে।
দ্রষ্টব্য: কখনও কখনও, যখন ব্যবহারকারী আপনার ক্রিয়াকলাপটি ছেড়ে দেয় (এটিকে ছাড়েন না), অ্যান্ড্রয়েড আপনার অ্যাপ্লিকেশনটি হত্যা করার সিদ্ধান্ত নিতে পারে। এই জাতীয় দৃশ্যে, আমি এমন কেসগুলির অভিজ্ঞতা পেয়েছি যার মধ্যে অ্যান্ড্রয়েড অ্যাপটি মারা যাওয়ার আগে সরবরাহ করা অভিপ্রায় ব্যবহার করে শেষ ক্রিয়াকলাপটি চালু করার চেষ্টা করে। এই ক্ষেত্রে, একক সিলেটে থাকা ডেটা (আপনার বা আপনার হয় Application
) চলে যাবে এবং খারাপ কিছু ঘটতে পারে। এই জাতীয় ঘটনা এড়াতে, আপনি হয় ডিস্কে অবজেক্টগুলি অবিরত রাখুন বা এর বৈধতা নিশ্চিত করার জন্য এটি ব্যবহারের আগে ডেটা পরীক্ষা করুন।
একটি সিঙ্গলটন ক্লাস ব্যবহার করুন
ডেটা ধরে রাখতে একটি ক্লাস করুন:
public class DataHolder {
private String data;
public String getData() {return data;}
public void setData(String data) {this.data = data;}
private static final DataHolder holder = new DataHolder();
public static DataHolder getInstance() {return holder;}
}
চালু হওয়া কার্যকলাপ থেকে:
String data = DataHolder.getInstance().getData();
অ্যাপ্লিকেশন একক ব্যবহার করুন
android.app.Application
অ্যাপ্লিকেশন লঞ্চ করার সময় অ্যাপ্লিকেশন সিঙ্গলটন একটি উদাহরণ যা তৈরি হয়। আপনি বাড়িয়ে একটি কাস্টম সরবরাহ করতে পারেন Application
:
import android.app.Application;
public class MyApplication extends Application {
private String data;
public String getData() {return data;}
public void setData(String data) {this.data = data;}
}
ক্রিয়াকলাপটি চালু করার আগে:
MyApplication app = (MyApplication) getApplicationContext();
app.setData(someData);
তারপরে, চালু করা কার্যকলাপ থেকে:
MyApplication app = (MyApplication) getApplicationContext();
String data = app.getData();
স্থির ক্ষেত্র
ধারণাটি মূলত সিঙ্গলটনের মতোই, তবে এক্ষেত্রে আপনি ডেটাটিতে স্থির অ্যাক্সেস সরবরাহ করেন:
public class DataHolder {
private static String data;
public static String getData() {return data;}
public static void setData(String data) {DataHolder.data = data;}
}
চালু হওয়া কার্যকলাপ থেকে:
String data = DataHolder.getData();
এর হ্যাশম্যাপ WeakReferences
একই ধারণা, তবে আবর্জনা সংগ্রহকারীকে অবাস্তবহীন বস্তুগুলি সরানোর অনুমতি দেয় (উদাহরণস্বরূপ যখন ব্যবহারকারী ক্রিয়াকলাপটি ত্যাগ করেন):
public class DataHolder {
Map<String, WeakReference<Object>> data = new HashMap<String, WeakReference<Object>>();
void save(String id, Object object) {
data.put(id, new WeakReference<Object>(object));
}
Object retrieve(String id) {
WeakReference<Object> objectWeakReference = data.get(id);
return objectWeakReference.get();
}
}
ক্রিয়াকলাপটি চালু করার আগে:
DataHolder.getInstance().save(someId, someObject);
চালু হওয়া কার্যকলাপ থেকে:
DataHolder.getInstance().retrieve(someId);
অভিপ্রায়টির অতিরিক্ত ব্যবহার করে আপনাকে অবজেক্ট আইডি পাস করতে বা নাও করতে পারে। এটি সব আপনার নির্দিষ্ট সমস্যার উপর নির্ভর করে।
ডিস্কে অবজেক্টগুলি স্থির রাখুন
অন্যান্য ক্রিয়াকলাপটি চালু করার আগে ডিস্কে ডেটা সংরক্ষণ করার ধারণাটি।
সুবিধা: আপনি অন্যান্য স্থান থেকে ক্রিয়াকলাপটি চালু করতে পারেন এবং যদি ডেটা ইতিমধ্যে বজায় থাকে তবে এটি ঠিকঠাক কাজ করা উচিত।
অসুবিধাগুলি: এটি জটিল এবং বাস্তবায়নে আরও বেশি সময় নেয়। আরও কোড প্রয়োজন এবং এর ফলে ত্রুটিগুলি প্রবর্তনের আরও সম্ভাবনা রয়েছে। এটিও অনেক ধীর হবে।
অবজেক্টগুলি বজায় রাখার কয়েকটি উপায়ের মধ্যে রয়েছে: