मैं किसी को यहाँ उम्मीद कर रही थी एक विचार क्या व्यवहार की इस तरह का कारण बनता है हो सकता है:गुम या गलत चित्र और पृष्ठभूमि बेतरतीब ढंग से एप्लिकेशन जीवनचक्र में
अपने आवेदन के दौरान मालूम होता है यादृच्छिक स्थानों में और यादृच्छिक की स्थिति में मैं यह देखने रहा हूँ अजीब यूआई मुद्दा। छवियों को काला (सही सीमाओं के साथ) या गलत छवि स्रोत (फिर से, सही सीमाओं के साथ) लोड किया जा रहा है। यह ImageViews
पर प्रभाव डालता है और रंग संसाधनों के संदर्भों के साथ android:background
टैग प्रभावित करता है।
मेरा आवेदन 6 लाइब्रेरी प्रोजेक्ट पर निर्भर करता है, यह ऐप में एक सेवा और क्रियाकलापों के माध्यम से मूल कोड चलाता है GlSurfaceViews (हालांकि, समस्या को प्रदर्शित करने वाली सभी गतिविधियां ओपनजीएल घटक नहीं हैं)। बड़ी मात्रा में स्मृति का उपयोग करके मुझे लगता है कि समस्या इनमें से किसी भी स्थान या उनमें से एक संयोजन से हो सकती है।
आप निम्न स्क्रीन शॉट्स में इस व्यवहार को देख सकते हैं:
यह वास्तव में एक 6 या तो पिक्सेल चौड़ा स्तंभ विभाजक छवि है जो गलती से मेरी imageView में तैयार किया गया है (imageView सही ढंग से आकार है लगता है अपने आप)।
जब आवेदन से बाहर जा रहा है और उसके बाद फिर से (बार-बार) में इसे वापस बजाय दिखाई दिया (और बने रहे) तो जैसे:
एक सेना स्पष्ट और एक के बाद साफ़ ऐप डेटा यह सही प्रारूप में लौटा:
जैसा कि आप इसके आगे बढ़ते हुए ग्लास छवि को भी देख सकते हैं, इनमें से प्रत्येक में ठीक दिख रहा है। इन अनुपलब्ध/गलत छवियों और पृष्ठभूमि के साथ समस्याएं एप्लिकेशन एप्लिकेशन लाइफसाइक्ल में यादृच्छिक रूप से होती हैं, और मैं इसे पुन: उत्पन्न करने का कोई तरीका नहीं ढूंढ पा रहा हूं।
इन छवियों के लिए लेआउट कुछ खास नहीं हैं, मैं प्रतिपादन जीवन चक्र के दौरान कुछ भी मजाकिया नहीं कर रहा हूं (मैं onDraw()
या onMeasure()
या इसी तरह से ओवरराइड नहीं कर रहा हूं)। इन छवियों का स्रोत गतिशील रूप से सेट नहीं किया जा रहा है लेकिन एक्सएमएल के माध्यम से।
जैसा कि आप उपर्युक्त उदाहरण से देख सकते हैं, यह एक बिल्ड समस्या नहीं है क्योंकि यह ऐप लाइफसाइकिलों के बीच नहीं होता है, जो कि इंस्टॉल के बीच नहीं है। यह भी सैमसंग 8.9, एसर Iconia Tab, Motarola XOOM,
मुझे ऐसा लगता है संदर्भ तालिका के साथ त्रुटि किसी प्रकार का हो सकता है, हो सकता है यह शायद मेरी मूल कोड से धकेल दिया था किया गया है विभिन्न उपकरणों पर हो रहा है,? या यह बहुत अधिक स्मृति का उपयोग कर आवेदन के कुछ चरणों में मेरा प्रभाव है?
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/browseProgressWrapper"
android:layout_width="match_parent"
android:layout_height="@dimen/actionbar_compat_height"
android:orientation="horizontal">
<RelativeLayout android:layout_width="@dimen/search_bar_width"
android:layout_height="match_parent">
<EditText android:id="@+id/browseFilter"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="4dp"
android:layout_marginLeft="5dp"
android:imeOptions="actionSearch"
android:background="@drawable/edit_text_blue"
android:maxLength="30"/>
<ImageView android:id="@+id/clearSearch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:src="@drawable/ic_input_delete"
android:layout_marginRight="5dp"/>
</RelativeLayout>
<ImageView android:id="@+id/browseFilterButton"
android:src="@drawable/ic_menu_search"
android:scaleType="center"
android:layout_width="@dimen/actionbar_compat_height"
android:layout_height="@dimen/actionbar_compat_height"
android:layout_gravity="center_vertical"
android:minWidth="@dimen/actionbar_compat_height"/>
</LinearLayout>
एक और ऐसे घटना आसपास के कोड/लेआउट का एक और अधिक पूर्ण विवरण मैं स्क्रीनशॉट के लिए प्राप्त करने के लिए हुआ:
मैं एक है
यहाँ ऊपर के उदाहरण के लिए XML स्रोत है "सेटिंग्स" Activity
जो नई सेटिंग्स के विवरण सहेजने के बाद मेरे ऐप को पुनरारंभ करता है।
mConfiguration.save();
mConfiguration = new Configuration(Configuration.getInstance());
getActivity().stopService(new Intent(getActivity(), NativeService.class));
getActivity().finish();
startActivity(new Intent(getActivity(), SplashActivity.class));
समय (और सबसे उपकरणों पर) इस ठीक काम करता है से अधिकांश, स्पलैश गतिविधि एक छवि है जो लोड करता है शामिल हैं: यह एक Service
रोक, एक नया Activity
(स्पलैश गतिविधि) को कॉल करने और खुद को खत्म कर करके करता है सही ढंग से। कभी-कभी कुछ उपकरणों पर स्पलैश गतिविधि या तो गलत संसाधन लोड करती है (मेरे परीक्षकों को "नाइके टिक के ऊपर उल्टा" के रूप में संदर्भित किया जाता है) या बस एक खाली बॉक्स (जैसा कि नीचे देखा गया है)। क्या किसी को पता है क्यों?
यहाँ, स्पलैश पेज के लिए लेआउट है के रूप में आप देख सकते हैं कि यह बहुत आसान है, कोई आश्चर्य:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/ContentBackgroundColor"
android:orientation="vertical" >
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="2" />
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/manager_android_400" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<ProgressBar
style="@android:style/Widget.ProgressBar.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="2" />
</LinearLayout>
थ्योरी का परीक्षण किया और debunct:
मैंने सिद्धांत है कि यह एक प्रोसेसर/मेमोरी मुद्दा हो सकता है जहां स्प्लैश स्क्रीन से पहले लेआउट पूरी तरह से तैयार नहीं किया जा रहा है और अगली गतिविधि पर चलता है इसलिए मैंने कोड के इस टुकड़े में डाल दिया:
image = (ImageView) findViewById(R.id.image);
image.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
image.getViewTreeObserver().removeGlobalOnLayoutListener(this);
moveToStartScreen.start();
}
});
आशा थी कि ऊपर दिया गया कोड यह सुनिश्चित करेगा कि छवि को निश्चित रूप से प्रारंभ पृष्ठ पर जाने से पहले लोड किया गया है लेकिन ऐसा कोई प्रभावशाली प्रभाव नहीं हुआ है।
एक और सिद्धांत
मैं भी अगर यह R.id/R.colour/R.drawable संसाधनों कुछ कैसे प्रोग्राम निष्पादन में currupted किये जाने के कारण किया जा रहा हो सकता है सोच रहा था? क्या किसी को पता है कि कि हो सकता है।
क्या मेरा मूल कोड कुछ स्मृति पते पर प्रचलित हो सकता है जो एंड्रॉइड सही ढंग से आवंटित नहीं कर रहा है?
क्या किसी ने इससे पहले देखा है - या शायद यह पता है कि यह व्यवहार क्यों होता है?
मैं गलत ड्रॉएबल पुस्तकालय परियोजनाओं में दिखाने मैं का उपयोग कर रहा था के साथ मुद्दों किया है, और जब से तुम एक ही बात मैं इसे googled सूचना दी और साथ समाप्त हो गया http://stackoverflow.com/questions/7724145/android-drawable -resource-आईडी-संघर्ष। कोई मदद? – aamit915
क्या आप अपने मूल कोड को अपने ऐप से इंटरफेस करने के तरीके के बारे में कुछ और बता सकते हैं? किसी चीज़ पर लिखे गए मूल कोड मेरे लिए सबसे अधिक व्यावहारिक प्रतीत होता है। –
@ मैट गिब्सन जेएनआई विधियों के माध्यम से देशी कोड इंटरफेस जो कॉलबैक/श्रोता विधियों को आग लगाते हैं जो यूआई घटक प्राप्त करने के लिए पंजीकरण कर सकते हैं। जेएनआई के बाहर भेजने का कोई प्रत्यक्ष डेटा नहीं है जबतक कि आप सीधे ओपनजीएल संदर्भ में मूल कोड लेखन पर विचार नहीं करते हैं। – Graeme