मैं निम्नलिखित का उपयोग कर एक नई गतिविधि शुरू करने कर रहा हूँ:FLAG_ACTIVITY_CLEAR_TASK सेट होने पर प्रारंभिकता पर ब्लैक स्क्रीन से कैसे बचें?
Intent intent = new Intent(this, MyNewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
overridePendingTransition(0, 0);
जबकि MyNewActivity
लॉन्च कर रहा है, एक काली स्क्रीन दिखाया गया है।
अगर मैं Intent.FLAG_ACTIVITY_CLEAR_TASK
निकालने के लिए, गतिविधि किसी भी क्षण में एक काले रंग की स्क्रीन को दिखाने के बिना शुरू की है (बजाय, पिछले गतिविधि जबकि नए भार दिखाया गया है)।
क्या इस ब्लैक स्क्रीन से बचने का कोई तरीका है? झंडे को हटाने का विकल्प नहीं लगता है (मुझे सभी मौजूदा कार्य के ढेर को साफ़ करने और जड़ के रूप में एक नई गतिविधि लॉन्च करने की आवश्यकता है)।
संपादित करें: मैं एक बहुत ही सरल कोड संलग्न करता हूं जो इस मुद्दे को पुन: उत्पन्न करता है (ऐप के लिए Theme.AppCompat
जैसे अंधेरे विषय को सेट करें)। ब्लैक स्क्रीन बहुत कम समय के लिए दिखाया गया है (इस पर निर्भर करता है कि लॉन्च होने पर प्राप्त करने वाली गतिविधि कितनी काम करती है), लेकिन आप इसे देख सकते हैं। आप FLAG_ACTIVITY_CLEAR_TASK
का उपयोग नहीं करते हैं, तो काली स्क्रीन नहीं दिखाया गया है और संक्रमण चिकनी है:
MainActivity
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, MyNewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
overridePendingTransition(0,0);
}
});
}
}
MyNewActivity
public class MyNewActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new);
}
}
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_blue_bright">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CLICK ME!" />
</RelativeLayout>
activity_new.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_green_light">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="I am the new activity!" />
</RelativeLayout>
धन्यवाद!
इतना है कि यह 'onCreate में बहुत कुछ कर नहीं करता है अपने अनुप्रयोग निश्चित करें()'। सामान को उस पृष्ठभूमि थ्रेड में ऑफ़लोड करें जिसे आप 'onrereate()' में शुरू करते हैं। –
मैं अब इसे अनुकूलित नहीं कर सकता, दुर्भाग्यवश (ऐप में कुछ बहुत ही विशेष दृश्य डिज़ाइन दिशानिर्देश हैं जिन्हें मुख्य थ्रेड में पृष्ठभूमि छवियों के कुछ हैंडलिंग करने की आवश्यकता है)। वैसे भी, यह ** नहीं ** समस्या है। मैंने किसी भी प्रोजेक्ट पर इसे पुन: पेश करने के लिए नमूना कोड संलग्न किया है, यहां तक कि ऐसी गतिविधि के साथ जो कुछ भी नहीं करता है। – Ereza
एक और विकल्प 'CLEAR_TASK' के बजाय' Intent.FLAG_ACTIVITY_CLEAR_TOP' का उपयोग करना होगा। यह केवल तभी काम करेगा जब आप स्टैक में 'MyNewActivity' का मूल उदाहरण छोड़ दें (यानी: जब आप अन्य गतिविधियां लॉन्च करते हैं तो इसे समाप्त न करें)। यदि यह अभी भी इसे ठीक नहीं करता है, तो आप 'Intent.FLAG_ACTIVITY_CLEAR_TOP | आज़मा सकते हैं Intent.FLAG_ACTIVITY_SINGLE_TOP'। यह ढेर से अन्य सभी गतिविधियों को साफ़ करेगा और 'MyNewActivity' के मौजूदा उदाहरण पर वापस आ जाएगा। इस मामले में, आप 'इरादा' में एक "अतिरिक्त" जोड़ सकते हैं, जो 'MyNewActivity'' न्यूइन्टेंट() 'पर जांच कर सकता है और यदि सेट हो, तो यह स्वयं को पुनः आरंभ कर सकता है। –