Android
गतिविधि
खोज…
परिचय
एक गतिविधि उपयोगकर्ता इंटरफ़ेस (UI) के साथ एकल स्क्रीन का प्रतिनिधित्व करती है। एक एंड्रॉइड ऐप में एक से अधिक गतिविधि हो सकती हैं, उदाहरण के लिए, एक ईमेल ऐप में सभी ईमेल को सूचीबद्ध करने के लिए एक गतिविधि हो सकती है, ईमेल सामग्री दिखाने के लिए एक और गतिविधि, फिर भी एक अन्य गतिविधि नए ईमेल की रचना करने के लिए। App में सभी गतिविधियाँ एक साथ मिलकर सही उपयोगकर्ता अनुभव तैयार करती हैं।
वाक्य - विन्यास
void onCreate (बंडल सहेजा गया InstanceState) // जब गतिविधि शुरू हो रही है तो कॉल किया गया।
void onPostCreate (बंडल सेवइनस्टांसस्टैट) // जब गतिविधि स्टार्ट-अप (ऑनस्टार्ट () और onRestoreInstanceState (बंडल) कहा जाता है) पूरा हो गया है।
void onStart () // onCreate (बंडल) के बाद कॉल किया गया - या onRestart () के बाद जब गतिविधि रोक दी गई थी, लेकिन अब उपयोगकर्ता को फिर से प्रदर्शित किया जा रहा है।
void onResume () // onRestoreInstanceState (बंडल), onRestart (), या onPause () के बाद कॉल किया गया, आपकी गतिविधि के लिए उपयोगकर्ता के साथ बातचीत शुरू करने के लिए।
void onPostResume () // जिसे गतिविधि फिर से शुरू होने पर बुलाया जाता है (onResume () के बाद कहा जाता है)।
void onRestart () // onStop () के बाद कॉल किया जाता है जब उपयोगकर्ता को वर्तमान गतिविधि फिर से दिखाई जा रही है (उपयोगकर्ता ने इसे वापस नेविगेट किया है)।
void onPause () // गतिविधि जीवनचक्र के भाग के रूप में कहा जाता है जब एक गतिविधि पृष्ठभूमि में जा रही है, लेकिन अभी तक नहीं मारा गया है।
void onStop () // जब आप उपयोगकर्ता को दिखाई नहीं देते हैं, तो कॉल किया जाता है।
शून्य onDestroy () // किसी भी गतिविधि को नष्ट करने से पहले किसी भी अंतिम सफाई का प्रदर्शन करें।
void onNewIntent (इरादे का इरादा) // यह उन गतिविधियों के लिए कहा जाता है, जो लॉन्चमोड को उनके पैकेज में "सिंगलटॉप" पर सेट करते हैं, या यदि क्लाइंट ने स्टार्ट-एक्टिविटी (इंटेंट) कॉल करते समय FLAG_ACTIVITY_SINGLE_TOP ध्वज का उपयोग किया हो।
void onSaveInstanceState (बंडल आउटस्टैट) // मारे जाने से पहले प्रति-गतिविधि स्थिति को पुनः प्राप्त करने के लिए कॉल किया जाता है ताकि राज्य को ऑनक्रिएट (बंडल) या onRestoreInstanceate (बंडल) में पुनर्स्थापित किया जा सके (इस विधि से पॉप किया गया बंडल दोनों को पास किया जाएगा। )।
void onRestoreInstanceState (बंडल saveInstanceState) // इस विधि को onStart () के बाद कहा जाता है, जब गतिविधि को पहले से सहेजे गए राज्य से पुनः आरंभ किया जा रहा है, जो यहां saveInstanceState में दिया गया है।
पैरामीटर
पैरामीटर | विवरण |
---|---|
इरादा | एक गतिविधि शुरू करने के लिए startActivity के साथ इस्तेमाल किया जा सकता है |
बंडल | स्ट्रिंग कुंजी से विभिन्न पार्सल योग्य मानों की मैपिंग। |
प्रसंग | एक अनुप्रयोग वातावरण के बारे में वैश्विक जानकारी के लिए इंटरफ़ेस। |
टिप्पणियों
एक गतिविधि एक अनुप्रयोग घटक है जो एक स्क्रीन प्रदान करता है जिसके साथ उपयोगकर्ता कुछ करने के लिए बातचीत कर सकते हैं, जैसे कि फोन को डायल करें, एक फोटो लें, एक ईमेल भेजें, या एक नक्शा देखें। प्रत्येक गतिविधि को एक विंडो दी जाती है जिसमें उसका यूजर इंटरफेस बनाया जाता है। विंडो आमतौर पर स्क्रीन को भरती है, लेकिन स्क्रीन से छोटी हो सकती है और अन्य विंडो के ऊपर तैर सकती है।
बैक-स्टैक इतिहास से एक गतिविधि को छोड़ दें
एक्टिविटी B
हो जिसे खोला जा सकता है, और आगे और गतिविधियाँ शुरू कर सकते हैं। लेकिन, उपयोगकर्ता को कार्य गतिविधियों में वापस नेविगेट करते समय इसका सामना नहीं करना चाहिए।
सबसे सरल उपाय यह है कि विशेषता noHistory
को उस <activity>
AndroidManifest.xml
में टैग के लिए true
पर सेट करें:
<activity
android:name=".B"
android:noHistory="true">
यदि अगली गतिविधि शुरू करने से पहले B
कॉल finish()
तो यह समान व्यवहार कोड से भी संभव है:
finish();
startActivity(new Intent(context, C.class));
noHistory
ध्वज का विशिष्ट उपयोग "स्प्लैश स्क्रीन" या लॉगिन गतिविधियों के साथ है।
Android गतिविधि जीवन चक्र समझाया
एक आवेदन को एक MainActivity के साथ मान लें जो बटन क्लिक का उपयोग करके अगली गतिविधि को कॉल कर सकता है।
public class MainActivity extends AppCompatActivity {
private final String LOG_TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(LOG_TAG, "calling onCreate from MainActivity");
}
@Override
protected void onStart() {
super.onStart();
Log.d(LOG_TAG, "calling onStart from MainActivity");
}
@Override
protected void onResume() {
super.onResume();
Log.d(LOG_TAG, "calling onResume from MainActivity");
}
@Override
protected void onPause() {
super.onPause();
Log.d(LOG_TAG, "calling onPause from MainActivity");
}
@Override
protected void onStop() {
super.onStop();
Log.d(LOG_TAG, "calling onStop from MainActivity");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(LOG_TAG, "calling onDestroy from MainActivity");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(LOG_TAG, "calling onRestart from MainActivity");
}
public void toNextActivity(){
Log.d(LOG_TAG, "calling Next Activity");
Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
} }
तथा
public class NextActivity extends AppCompatActivity {
private final String LOG_TAG = NextActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_next);
Log.d(LOG_TAG, "calling onCreate from Next Activity");
}
@Override
protected void onStart() {
super.onStart();
Log.d(LOG_TAG, "calling onStart from Next Activity");
}
@Override
protected void onResume() {
super.onResume();
Log.d(LOG_TAG, "calling onResume from Next Activity");
}
@Override
protected void onPause() {
super.onPause();
Log.d(LOG_TAG, "calling onPause from Next Activity");
}
@Override
protected void onStop() {
super.onStop();
Log.d(LOG_TAG, "calling onStop from Next Activity");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(LOG_TAG, "calling onDestroy from Next Activity");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(LOG_TAG, "calling onRestart from Next Activity");
} }
जब ऐप पहली बार बनाया गया है
डी / मेनऐक्टिविटी: मेनऐक्टिविटी से ऑनक्रिएट करना
डी / मेनऐक्टिविटी: मेनऐक्टिविटी से ऑनस्टार्ट को कॉल करना
D / MainActivity: MainActivity से onResume पर कॉल करना
कहा जाता है
जब स्क्रीन सोता है
08: 11: 03.142 डी / मेनऐक्टिविटी: मेनऐक्टिविटी से ऑनपॉन्ज
08: 11: 03.192 डी / मेनऐक्टिविटी: मेनऐक्टिविटी से ऑनस्पॉट कॉलिंग
कहा जाता है। और फिर से जब उठता है
08: 11: 55.922 डी / मेनऐक्टिविटी: मेनऐक्टिविटी से ऑनस्टार्ट को कॉल करना
08: 11: 55.962 डी / मेनऐक्टिविटी: मेनएक्टिविटी से ऑनस्टार्ट को कॉल करना
08: 11: 55.962 डी / मेनऐक्टिविटी: मेनऐक्टिविटी से ऑनस्क्यूम
कहा जाता है
Case1: जब अगली गतिविधि को मुख्य गतिविधि से बुलाया जाता है
डी / मेनऐक्टिविटी: अगली गतिविधि को कॉल करना
डी / मेनऐक्टिविटी: मेनऐक्टिविटी से ऑनपॉज कॉलिंग
D / NextActivity: अगली गतिविधि से कॉल करना
डी / NextActivity: अगली गतिविधि से onStart को कॉल करना
डी / NextActivity: अगली गतिविधि से onResume पर कॉल करना
डी / मेनऐक्टिविटी: मेनऐक्टिविटी से ऑनस्पॉट कॉलिंग
बैक बटन का उपयोग करते हुए अगली गतिविधि से मुख्य गतिविधि पर वापस लौटते समय
डी / NextActivity: अगली गतिविधि से कॉल करना
डी / मेनऐक्टिविटी: मेनऐक्टिविटी से ऑनस्टार्ट को कॉल करना
डी / मेनऐक्टिविटी: मेनऐक्टिविटी से ऑनस्टार्ट को कॉल करना
D / MainActivity: MainActivity से onResume पर कॉल करना
D / NextActivity: अगली गतिविधि से onStop को कॉल करना
डी / नेक्स्टअक्टिविटी: नेक्स्ट एक्टिविटी से ऑनडेस्ट्रो को कॉल करना
Case2: जब गतिविधि आंशिक रूप से अस्पष्ट हो जाती है (जब अवलोकन बटन दबाया जाता है) या जब एप्लिकेशन पृष्ठभूमि में जाता है और कोई अन्य एप्लिकेशन इसे पूरी तरह से हटा देता है
डी / मेनऐक्टिविटी: मेनऐक्टिविटी से ऑनपॉज कॉलिंग
डी / मेनऐक्टिविटी: मेनऐक्टिविटी से ऑनस्पॉट कॉलिंग
और जब एप्लिकेशन उपयोगकर्ता इनपुट स्वीकार करने के लिए तैयार अग्रभूमि में वापस आ जाता है,
डी / मेनऐक्टिविटी: मेनऐक्टिविटी से ऑनस्टार्ट को कॉल करना
डी / मेनऐक्टिविटी: मेनऐक्टिविटी से ऑनस्टार्ट को कॉल करना
D / MainActivity: MainActivity से onResume पर कॉल करना
कहा जाता है
Case3: जब अंतर्निहित इरादे को पूरा करने के लिए एक गतिविधि कहा जाता है और उपयोगकर्ता ने एक चयन किया है। उदाहरण के लिए, जब शेयर बटन दबाया जाता है और उपयोगकर्ता को दिखाई गई एप्लिकेशन की सूची में से एक ऐप का चयन करना होता है
डी / मेनऐक्टिविटी: मेनऐक्टिविटी से ऑनपॉज कॉलिंग
गतिविधि दिखाई दे रही है लेकिन अभी सक्रिय नहीं है। जब चयन हो जाता है और ऐप सक्रिय हो जाता है
D / MainActivity: MainActivity से onResume पर कॉल करना
कहा जाता है
Case4:
एप्लिकेशन पृष्ठभूमि में (मुक्त संसाधनों के लिए एक और अग्रभूमि एप्लिकेशन के लिए) की मौत हो गई है, onPause या onStop (पूर्व मधुकोश डिवाइस के लिए) (के लिए मधुकोश डिवाइस के बाद से) पिछले हो जाएगा से पहले एप्लिकेशन समाप्त होता है कहा जाता है।
प्रत्येक बार एप्लिकेशन चलाने के बाद onCreate और onDestroy को अधिकतम कहा जाएगा। लेकिन onPause, onStop, onRestart, onStart, onResume शायद जीवनचक्र के दौरान कई बार कहा जाता है।
गतिविधि का शुभारंभ
लॉन्च मोड कार्य में नई या मौजूदा गतिविधि के व्यवहार को परिभाषित करता है।
संभव लॉन्च मोड हैं:
- मानक
- singleTop
- singleTask
- एक घटना
इसे एंड्रॉइड में <activity/>
तत्व में android:launchMode
रूप में परिभाषित किया जाना चाहिए android:launchMode
विशेषता।
<activity
android:launchMode=["standard" | "singleTop" | "singleTask" | "singleInstance"] />
मानक:
डिफ़ॉल्ट मान। यदि यह मोड सेट होता है, तो प्रत्येक नए इरादे के लिए नई गतिविधि हमेशा बनाई जाएगी। इसलिए एक ही प्रकार की कई गतिविधियाँ करना संभव है। नई गतिविधि को कार्य के शीर्ष पर रखा जाएगा। अलग-अलग एंड्रॉइड वर्जन के लिए कुछ अंतर है: यदि गतिविधि किसी अन्य एप्लिकेशन से शुरू हो रही है, तो एंड्रॉइड <= 4.4 पर इसे स्टार्टर एप्लिकेशन के समान कार्य पर रखा जाएगा, लेकिन> = 5.0 नया कार्य बनाया जाएगा।
SingleTop:
यह विधा लगभग standard
के समान है। सिंगलटॉप गतिविधि के कई उदाहरण बनाए जा सकते हैं। अंतर यह है कि, यदि मौजूदा स्टैक के शीर्ष पर पहले से ही गतिविधि का एक उदाहरण मौजूद है, तो नया उदाहरण बनाने के बजाय onNewIntent()
को कॉल किया जाएगा।
SingleTask:
इस लॉन्च मोड के साथ गतिविधि प्रणाली में केवल एक उदाहरण हो सकती है। गतिविधि के लिए नया कार्य बनाया जाएगा, अगर वह मौजूद नहीं है। अन्यथा, गतिविधि के साथ कार्य को सामने की ओर ले जाया जाएगा और onNewIntent
कहा जाएगा।
एक घटना:
यह मोड singleTask
समान है। यह अंतर कार्य है जो singleInstance
गतिविधि के साथ एक गतिविधि रखता है केवल यह गतिविधि हो सकती है और इससे अधिक कुछ नहीं। जब singleInstance
गतिविधि दूसरी गतिविधि बनाती है, तो उस गतिविधि को करने के लिए नया कार्य बनाया जाएगा।
SetContentView के साथ UI प्रस्तुत करना
एक्टिविटी क्लास आपके लिए एक विंडो बनाने का ध्यान रखती है जिसमें आप अपने यूआई को setContentView
साथ रख सकते हैं।
तीन setContentView
तरीके हैं:
-
setContentView(int layoutResID)
- एक लेआउट संसाधन से गतिविधि सामग्री सेट करें। -
setContentView(View view)
- एक स्पष्ट दृश्य के लिए गतिविधि सामग्री सेट करें। -
setContentView(View view, ViewGroup.LayoutParams params)
- गतिविधि सामग्री सेटsetContentView(View view, ViewGroup.LayoutParams params)
साथ एक स्पष्ट दृश्य में सेट करें।
जब setContentView
कहा जाता है, तो यह दृश्य सीधे गतिविधि के दृश्य पदानुक्रम में रखा जाता है। यह स्वयं एक जटिल दृश्य पदानुक्रम हो सकता है।
उदाहरण
संसाधन फ़ाइल से सामग्री सेट करें:
दृश्य पदानुक्रम के साथ संसाधन फ़ाइल (इस उदाहरण में main.xml) जोड़ें:<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello" />
</FrameLayout>
इसे गतिविधि में सामग्री के रूप में सेट करें:
public final class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// The resource will be inflated,
// adding all top-level views to the activity.
setContentView(R.layout.main);
}
}
एक स्पष्ट दृश्य में सामग्री सेट करें:
public final class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Creating view with container
final FrameLayout root = new FrameLayout(this);
final TextView text = new TextView(this);
text.setText("Hello");
root.addView(text);
// Set container as content view
setContentView(root);
}
}
अपनी वर्तमान गतिविधि स्टैक साफ़ करें और एक नई गतिविधि लॉन्च करें
यदि आप अपनी वर्तमान गतिविधि स्टैक को खाली करना चाहते हैं और एक नई गतिविधि लॉन्च करते हैं (उदाहरण के लिए, एप्लिकेशन से लॉग आउट करना और गतिविधि में लॉग लॉन्च करना), तो दो दृष्टिकोण प्रतीत होते हैं।
1. लक्ष्य (एपीआई> = 16)
कॉलिंग finishAffinity()
एक गतिविधि से
2. लक्ष्य (11 <= एपीआई <16)
Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK |Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
रीसेंट को छोड़कर आवेदन समाप्त करें
सबसे पहले AndroidManifest.xml में एक ExitActivity को परिभाषित करें
<activity
android:name="com.your_example_app.activities.ExitActivity"
android:autoRemoveFromRecents="true"
android:theme="@android:style/Theme.NoDisplay" />
बाद में एक्ज़िटक्टिविटी-क्लास
/**
* Activity to exit Application without staying in the stack of last opened applications
*/
public class ExitActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Utils.hasLollipop()) {
finishAndRemoveTask();
} else if (Utils.hasJellyBean()) {
finishAffinity();
} else {
finish();
}
}
/**
* Exit Application and Exclude from Recents
*
* @param context Context to use
*/
public static void exitApplication(ApplicationContext context) {
Intent intent = new Intent(context, ExitActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.startActivity(intent);
}
}
गतिविधियों के लिए नेविगेशन
एंड्रॉइड में एंड्रॉइड को जोड़कर android:parentActivityName=""
में काम किया जाता है android:parentActivityName=""
गतिविधि टैग के लिए Manifest.xml में android:parentActivityName=""
। मूल रूप से इस टैग के साथ आप सिस्टम को किसी गतिविधि की मूल गतिविधि के बारे में बताते हैं।
यह कैसे किया जाता है?
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".SkillSchoolApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".ui.activities.SplashActivity"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ui.activities.MainActivity" />
<activity android:name=".ui.activities.HomeActivity"
android:parentActivityName=".ui.activities.MainActivity/> // HERE I JUST TOLD THE SYSTEM THAT MainActivity is the parent of HomeActivity
</application>
अब जब मैं HomeActivity के टूलबार के अंदर तीर पर क्लिक करूंगा तो यह मुझे मूल गतिविधि पर वापस ले जाएगा।
जावा कोड
यहां मैं इस कार्यक्षमता के लिए आवश्यक उपयुक्त जावा कोड लिखूंगा।
public class HomeActivity extends AppCompatActivity {
@BindView(R.id.toolbar)
Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
ButterKnife.bind(this);
//Since i am using custom tool bar i am setting refernce of that toolbar to Actionbar. If you are not using custom then you can simple leave this and move to next line
setSupportActionBar(toolbar);
getSupportActionBar.setDisplayHomeAsUpEnabled(true); // this will show the back arrow in the tool bar.
}
}
यदि आप इस कोड को चलाते हैं तो आप देखेंगे जब आप बैक बटन दबाते हैं तो यह आपको मेनऐक्टिविटी पर वापस ले जाएगा। अप नेविगेशन की भविष्य की समझ के लिए मैं डॉक्स पढ़ने की सलाह दूंगा
आप ओवरराइड करके अपनी आवश्यकताओं पर इस व्यवहार को और अधिक अनुकूलित कर सकते हैं
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this); // Here you will write your logic for handling up navigation
return true;
}
return super.onOptionsItemSelected(item);
}
सरल हैक
यह सरल हैक है जो कि माता-पिता की गतिविधि में नेविगेट करने के लिए उपयोग किया जाता है यदि माता-पिता बैकस्ट में हैं। onBackPressed()
कॉल करके यदि onBackPressed()
android.R.id.home
बराबर है
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}