একটি বর্ধিত Application
শ্রেণি বিশ্বব্যাপী ভেরিয়েবল ঘোষণা করতে পারে। অন্যান্য কারণ আছে?
একটি বর্ধিত Application
শ্রেণি বিশ্বব্যাপী ভেরিয়েবল ঘোষণা করতে পারে। অন্যান্য কারণ আছে?
উত্তর:
অফহ্যান্ড, আমি এমন বাস্তব দৃশ্যের কথা ভাবতে পারি না যেখানে অ্যাপ্লিকেশন প্রসারিত করা হয় অন্য পদ্ধতির চেয়ে পছন্দনীয় বা কোনও কিছু সম্পাদনের জন্য প্রয়োজনীয়। আপনার যদি কোনও ব্যয়বহুল, ঘন ঘন ব্যবহৃত অবজেক্ট থাকে তবে আপনি সনাক্ত করতে পারেন যে বস্তুটি বর্তমানে উপস্থিত নেই। অ্যাপ্লিকেশনটি নিজেই ইউআই থ্রেডে চালিত হয়, যখন ইনটেন্ট সার্ভিস নিজস্ব থ্রেডে চালিত হয়।
আমি ক্রিয়াকলাপ থেকে স্পষ্টত ইন্টেন্টের সাথে ক্রিয়াকলাপে ডেটা পাস করতে পছন্দ করি, বা SharedPreferences ব্যবহার করি। ইন্টারফেসগুলি ব্যবহার করে একটি খণ্ড থেকে তার পিতামাতার ক্রিয়াকলাপে ডেটা পাঠানোর উপায় রয়েছে।
"prefer to pass data from Activity to Activity with explicit Intents, or use SharedPreferences"
। আমাদের সর্বদা গ্লোবাল রাষ্ট্রকে যতটা সম্ভব আমরা মুছে ফেলা উচিত এবং স্ট্যাটিক ওয়ার /
apk
আমাদের মোবাইলে কোনও ফাইল বিবেচনা করি তবে এটিতে একাধিক দরকারী ব্লক যেমন, Activity
এস, Service
এস এবং অন্যান্য রয়েছে।Application
নির্বিশেষে আমাদের একটি ভেরিয়েবল এবং এর রাজ্যগুলি অ্যাক্সেস করতে হবে Activity
,Application
,Cursor
এবং এটিকে বারবার বন্ধ করা পারফরম্যান্সে ভাল নয়,Intent
ডেটা পাস করার জন্য গুলি ব্যবহার করতে পারি তবে এটিকে আনাড়ি এবং মেমরির উপলব্ধতার উপর নির্ভর করে কোনও নির্দিষ্ট দৃশ্যে কার্যকলাপ নিজেই উপস্থিত থাকতে পারে।Application
,Application
বিশ্লেষণ ইত্যাদি কিছু শুরু করার পর থেকে আবেদন বর্গ সামনে শুরু হয় Activity
s অথবা
Services
গুলি চালানো হচ্ছে হয়,অ্যাপ্লিকেশন শ্রেণি হল এমন একটি জিনিস যা আপনার আবেদনের পুরো জীবনকোষ রয়েছে। এটি অ্যাপ্লিকেশন হিসাবে আপনার সর্বোচ্চ স্তর। সম্ভাব্য ব্যবহারের উদাহরণ:
অ্যাপ্লিকেশন ক্লাসে অনক্রিটকে ওভাররাইড করে যখন অ্যাপ্লিকেশন শুরু করা হয় তখন আপনি যা প্রয়োজন তা যুক্ত করতে পারেন।
ক্রিয়াকলাপ থেকে ক্রিয়াকলাপে লাফানো বৈশ্বিক পরিবর্তনশীলগুলি সঞ্চয় করুন। অ্যাসিঙ্কটাস্কের মতো।
ইত্যাদি
কখনও কখনও আপনি বিশ্বব্যাপী ভেরিয়েবলগুলির মতো ডেটা সঞ্চয় করতে চান যা একাধিক ক্রিয়াকলাপ থেকে অ্যাক্সেস করা প্রয়োজন - কখনও কখনও অ্যাপ্লিকেশনের মধ্যে সর্বত্র। এই ক্ষেত্রে, অ্যাপ্লিকেশন অবজেক্ট আপনাকে সহায়তা করবে।
উদাহরণস্বরূপ, আপনি যদি প্রতিটি http অনুরোধের জন্য বেসিক প্রমাণীকরণ ডেটা পেতে চান , আপনি অ্যাপ্লিকেশন অবজেক্টে প্রমাণীকরণ ডেটার জন্য পদ্ধতিগুলি প্রয়োগ করতে পারেন।
এর পরে, আপনি এর মতো যে কোনও কার্যকলাপে ব্যবহারকারীর নাম এবং পাসওয়ার্ড পেতে পারেন:
MyApplication mApplication = (MyApplication)getApplicationContext();
String username = mApplication.getUsername();
String password = mApplication.getPassword();
এবং পরিশেষে, অ্যাপ্লিকেশন অবজেক্টটি সিঙ্গলটন অবজেক্ট হিসাবে ব্যবহার করতে ভুলবেন না:
public class MyApplication extends Application {
private static MyApplication singleton;
public MyApplication getInstance(){
return singleton;
}
@Override
public void onCreate() {
super.onCreate();
singleton = this;
}
}
আরও তথ্যের জন্য, দয়া করে অ্যাপ্লিকেশন ক্লাস ক্লিক করুন
অ্যাপ্লিকেশন ক্লাসটি এমন একটি একক যা আপনি যে কোনও ক্রিয়াকলাপ বা অন্য কোথাও আপনার প্রসঙ্গ অবজেক্ট থেকে অ্যাক্সেস করতে পারবেন।
আপনিও কিছুটা জীবনচক্র পেতে পারেন।
আপনি ব্যয়বহুল, তবে অ্যানালিটিক্স সহায়ক হিসাবে প্রায়শই ব্যবহৃত বস্তুগুলি ইনস্ট্যান্ট করতে অ্যাপ্লিকেশনটির অনক্রিট পদ্ধতিটি ব্যবহার করতে পারেন। তারপরে আপনি এই আইটেমগুলিকে যে কোনও জায়গায় অ্যাক্সেস করতে এবং ব্যবহার করতে পারবেন।
অ্যাপ্লিকেশন ক্লাসের সেরা ব্যবহার। উদাহরণ: ধরুন আপনার বুট সম্পন্ন হওয়ার সময় আপনার অ্যালার্ম ম্যানেজারটি পুনরায় চালু করতে হবে।
public class BaseJuiceApplication extends Application implements BootListener {
public static BaseJuiceApplication instance = null;
public static Context getInstance() {
if (null == instance) {
instance = new BaseJuiceApplication();
}
return instance;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onBootCompleted(Context context, Intent intent) {
new PushService().scheduleService(getInstance());
//startToNotify(context);
}
কোনও উত্তর নয় তবে একটি পর্যবেক্ষণ : মনে রাখবেন যে বর্ধিত অ্যাপ্লিকেশন অবজেক্টের ডেটা কোনও ক্রিয়াকলাপের উদাহরণের সাথে বেঁধে রাখা উচিত নয়, কারণ আপনার একই সময়ে একই ক্রিয়াকলাপের দুটি ঘটনা চলার সম্ভাবনা রয়েছে (একটিতে এটি পুরোভাগে এবং এক দৃশ্যমান নয়) ।
উদাহরণস্বরূপ, আপনি লঞ্চের মাধ্যমে আপনার কার্যকলাপটি সাধারণত শুরু করেন, তারপরে এটি "ছোট করুন" ize এরপরে আপনি আর একটি অ্যাপ্লিকেশন (অর্থাত্ টাস্কার) শুরু করেন যা আপনার অ্যাক্টিভিটিটির আরেকটি উদাহরণ শুরু করে, উদাহরণস্বরূপ একটি শর্টকাট তৈরি করার জন্য, কারণ আপনার অ্যাপ্লিকেশনটি android.intent.action.CREATE_SHORTCUT সমর্থন করে। এরপরে যদি শর্টকাটটি তৈরি হয় এবং এই শর্টকাট তৈরির ক্রিয়াকলাপটি অ্যাপ্লিকেশন অবজেক্টের ডেটা সংশোধন করে, তবে ব্যাকগ্রাউন্ডে চলমান ক্রিয়াকলাপটি পূর্বের পৃষ্ঠায় ফিরে আসার পরে এই পরিবর্তিত অ্যাপ্লিকেশন অবজেক্টটি ব্যবহার করা শুরু করবে।
আমি দেখতে পাচ্ছি যে এই প্রশ্নের একটি উত্তর অনুপস্থিত। আমি প্রসারিত করি Application
কারণ আমি বিল পুঘ সিঙ্গলটন বাস্তবায়ন ( রেফারেন্স দেখুন ) ব্যবহার করি এবং আমার কিছু সিলেটটনের প্রসঙ্গ প্রয়োজন। Application
ভালো বর্গ দেখায়:
public class MyApplication extends Application {
private static final String TAG = MyApplication.class.getSimpleName();
private static MyApplication sInstance;
@Contract(pure = true)
@Nullable
public static Context getAppContext() {
return sInstance;
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate() called");
sInstance = this;
}
}
এবং সিঙ্গলেটগুলি দেখতে এটির মতো:
public class DataManager {
private static final String TAG = DataManager.class.getSimpleName();
@Contract(pure = true)
public static DataManager getInstance() {
return InstanceHolder.INSTANCE;
}
private DataManager() {
doStuffRequiringContext(MyApplication.getAppContext());
}
private static final class InstanceHolder {
@SuppressLint("StaticFieldLeak")
private static final DataManager INSTANCE = new DataManager();
}
}
আমি যখনই সিঙ্গলটন ব্যবহার করি তখন প্রতিবার আমার প্রসঙ্গ থাকার দরকার হয় না এবং ন্যূনতম পরিমাণ কোডের সাথে অলস সিঙ্ক্রোনাইজড আরম্ভ হয়।
টিপ: অ্যান্ড্রয়েড স্টুডিও একক টেমপ্লেট আপডেট করা অনেক সময় সাশ্রয় করে।
আমি মনে করি আপনি অ্যাপ্লিকেশন ক্লাসটি অনেক কিছুর জন্য ব্যবহার করতে পারেন, তবে আপনার যে কোনও ক্রিয়াকলাপ বা পরিষেবা শুরু হওয়ার আগে সেগুলি আপনার প্রয়োজনীয় কিছু কিছুতে আবদ্ধ। উদাহরণস্বরূপ, আমার অ্যাপ্লিকেশনটিতে আমি কাস্টম ফন্ট ব্যবহার করি। কল করার পরিবর্তে
Typeface.createFromAsset()
অ্যাসেটস ফোল্ডার থেকে আমার ফন্টগুলির জন্য রেফারেন্স পেতে প্রতিটি ক্রিয়াকলাপ থেকে (এটি খারাপ কারণ এটি মেমরি ফুটো হওয়ার কারণ হবে যখন আপনি যখন এই পদ্ধতিটি কল করবেন তখন যতবার সম্পত্তির রেফারেন্স রাখছেন), আমি onCreate()
আমার অ্যাপ্লিকেশন ক্লাসের পদ্ধতি থেকে এটি করি :
private App appInstance;
Typeface quickSandRegular;
...
public void onCreate() {
super.onCreate();
appInstance = this;
quicksandRegular = Typeface.createFromAsset(getApplicationContext().getAssets(),
"fonts/Quicksand-Regular.otf");
...
}
এখন, আমারও এই পদ্ধতিটি সংজ্ঞায়িত করা হয়েছে:
public static App getAppInstance() {
return appInstance;
}
এবং এই:
public Typeface getQuickSandRegular() {
return quicksandRegular;
}
সুতরাং, আমার আবেদনের যে কোনও জায়গা থেকে আমাকে যা করতে হবে তা হ'ল:
App.getAppInstance().getQuickSandRegular()
আমার জন্য অ্যাপ্লিকেশন ক্লাসের জন্য আরেকটি ব্যবহার হ'ল ডিভাইসটি ইন্টারনেটের সাথে সংযুক্ত কিনা তা আগে যাচাই করা দরকার যা কার্যক্রম এবং পরিষেবাগুলির আগে সংযোগের প্রয়োজন হয় যা আসলেই শুরু হয় এবং প্রয়োজনীয় ব্যবস্থা গ্রহণ করে।
উত্স: https://github.com/codepath/android_guides/wiki/Unders বোঝা- অ্যান্ড্রয়েড- অ্যাপ্লিকেশন- ক্লাস
অনেক অ্যাপে সরাসরি অ্যাপ্লিকেশন শ্রেণির সাথে কাজ করার দরকার নেই। তবে কাস্টম অ্যাপ্লিকেশন শ্রেণীর কয়েকটি গ্রহণযোগ্য ব্যবহার রয়েছে:
- বিশেষ কাজগুলি যা আপনার প্রথম ক্রিয়াকলাপটি তৈরির আগে চালানো দরকার
- গ্লোবাল ইনিশিয়ালাইজেশন যা সমস্ত উপাদানগুলিতে ভাগ করা দরকার (ক্র্যাশ রিপোর্টিং, অধ্যবসায়)
- স্থায়ী অপরিবর্তনীয় ডেটা যেমন ভাগ করা নেটওয়ার্ক ক্লায়েন্ট অবজেক্টের সহজে অ্যাক্সেসের জন্য স্ট্যাটিক পদ্ধতি
অ্যাপ্লিকেশন অবজেক্টের মধ্যে আপনার কখনই পরিবর্তনীয় উদাহরণ ডেটা সংরক্ষণ করা উচিত নয় কারণ আপনি যদি ধরে নেন যে আপনার ডেটা সেখানেই থেকে যাবে তবে আপনার অ্যাপ্লিকেশনটি কোনও সময়ে নালপয়েন্টার এক্সসেপশন সহ অনিবার্যভাবে ক্রাশ হবে। অ্যাপ্লিকেশন অবজেক্টটি চিরতরে স্মৃতিতে থাকার গ্যারান্টিযুক্ত নয়, এটি মারা যাবে। জনপ্রিয় বিশ্বাসের বিপরীতে, অ্যাপটি স্ক্র্যাচ থেকে পুনরায় আরম্ভ হবে না। অ্যান্ড্রয়েড একটি নতুন অ্যাপ্লিকেশন অবজেক্ট তৈরি করবে এবং সেই অ্যাপ্লিকেশনটিকে প্রথম স্থানে হত্যা করা হয়নি এমন ধারণা দেয়ার আগে ব্যবহারকারীরা এমন কার্যকলাপ শুরু করবে।
প্রসারিত অ্যাপ্লিকেশনটির ব্যবহার আপনার অ্যাপ্লিকেশন চলমান সময়কালে আপনার যে কোনও প্রকারের ক্রিয়াকলাপের জন্য কেবল আপনার অ্যাপ্লিকেশনটিকে নিশ্চিত করে। এখন এটি কোনও ধরণের ভেরিয়েবল হতে পারে এবং ধরুন আপনি যদি সার্ভার থেকে কিছু তথ্য আনতে চান তবে আপনি আপনার অ্যাসিনটাস্কটিকে প্রয়োগ করতে পারেন যাতে এটি প্রতিটি সময় এবং অবিচ্ছিন্নভাবে আসে, যাতে আপনি স্বয়ংক্রিয়ভাবে একটি আপডেট হওয়া ডেটা পাবেন .. এই লিঙ্কটি ব্যবহার করুন আরও জ্ঞানের জন্য ....
http://www.intridea.com/blog/2011/5/24/how-to-use-application-object-of-android
অন্যান্য উত্তরের সাথে যুক্ত করে বলা হয়েছে যে আপনি অ্যাপ্লিকেশন স্কোপটিতে স্টোর ভেরিয়েবলগুলি পছন্দ করতে পারেন, যে কোনও দীর্ঘমেয়াদী থ্রেড বা অন্যান্য বস্তুর জন্য যেখানে আপনার অ্যাপ্লিকেশনটির বাধ্যবাধকতা প্রয়োজন যেখানে আপনি কোনও ক্রিয়াকলাপ ব্যবহার করছেন না (অ্যাপ্লিকেশন কোনও ক্রিয়াকলাপ নয়) .. যেমন একটি বাঁধা পরিষেবাটির জন্য অনুরোধ করতে না পারা .. তারপরে অ্যাপ্লিকেশন দৃষ্টিতে বাইন্ডিং পছন্দ করা হয়। এই পদ্ধতির সাথে একমাত্র সুস্পষ্ট সতর্কতা হ'ল অ্যাপ্লিকেশন যতদিন বেঁচে থাকে ততক্ষণ অবজেক্টগুলি বেঁচে থাকে, তাই মেমরির উপর আরও অন্তর্নিহিত নিয়ন্ত্রণ প্রয়োজন অন্যথায় আপনি মেমরি-সম্পর্কিত সমস্যার মতো ফাঁসের মুখোমুখি হবেন।
অন্য যে কোনও জিনিস আপনাকে দরকারী মনে হতে পারে তা হ'ল ক্রিয়াকলাপগুলির ক্রমে, কোনও ক্রিয়াকলাপের আগে প্রথমে অ্যাপ্লিকেশনটি শুরু হয়। এই সময়সীমার মধ্যে, আপনি যদি ইচ্ছা করেন তবে আপনার প্রয়োজনীয় ক্রিয়াকলাপের আগে যে কোনও প্রয়োজনীয় গৃহকর্ম তৈরি করতে পারেন।
2018-10-19 11:31:55.246 8643-8643/: application created
2018-10-19 11:31:55.630 8643-8643/: activity created