आपका स्वागत है!
आपको क्या करना शुरू करना है और सब कुछ काम करेगा, इसके बारे में पोस्ट से प्रेरित होकर, इस लेख में मैं कई प्रेरणाओं के परिणाम और एंड्रॉइड ओएस के लिए एक एप्लिकेशन विकसित करने के अपने अनुभव के बारे में एक कहानी साझा करना चाहूंगा। मैं एक विचार के उद्भव से इसके कार्यान्वयन तक की प्रक्रिया का वर्णन करने का प्रयास करूंगा।
पिछली गर्मियों ने मुझे ढाई महीने की पूरी आजादी दी, जिसमें से आधी मैंने कार्यक्रम लिखने में खर्च की। मैं ऐसा नहीं हूं कि एक शुरुआत - मेरा डिप्लोमा पहला गंभीर पर्याप्त प्रोजेक्ट था, हालांकि, मुझे लगता है कि यह विशेष आवेदन
मुझे प्रसिद्धि दिलाएगा , आपके लिए दिलचस्प होगा।
मेरे पास उस समय क्या स्रोत था:
- समय
- गैलेक्सी टैब
- ADT प्लगइन के साथ ग्रहण आईडीई
ऐसा लगता होगा। और यहाँ हैब्र?
लेकिन इसके साथ ही। आपका ध्यान - Habrachtets:

जैसा कि मैंने पहले ही उल्लेख किया है, इस साल के जून के अंत में मैं कुछ महीनों के लिए किसी भी तरह के रोजगार से मुक्त होने वाला था। और मैंने एक आदत बनाई, सुबह उठकर, टेबलेट पर तीन समाचार अनुप्रयोगों के एक जोड़े को खोलें, ध्यान से बाजार द्वारा की पेशकश की, और ध्यान से उनका अध्ययन करें। और क्या, बहुत सुविधाजनक। एक कप स्टीमिंग कॉफ़ी, बालकनी से एक दृश्य, एक सैंडविच और अब से घर में वायरलेस वाई-फाई ने मेरे दिन की शुरुआत की।
केवल हेब्रैक्लिएंट की अनुपस्थिति ने मरहम में अपनी मक्खी को जोड़ा - आपको ओपेरा खोलना होगा, साइट पर जाना होगा, स्क्रॉल करना होगा, एडजस्ट करना होगा ... ऐसा नहीं है कि सीधा सीधा असुविधाजनक है, लेकिन एक उंगली से इसे धक्का देना इतना आसान नहीं है, लेकिन यह सोचना, विशेष रूप से अपने हाथ में एक कप कॉफी के साथ। इन्हीं में से एक क्षण में मैंने सोचा। और मैंने फैसला किया। मेरे पास पहले से मौजूद एप्लिकेशन की समानता में साइट के लिए क्लाइंट लिखने का प्रयास करें।
स्रोत क्या था:
- हैबर के वेब पेज का मतलब यह है कि यह सभी के साथ है
- थीसिस लिखने में अनुभव, जो सर्वर का एक गुच्छा है - क्लाइंट, क्लाइंट (ड्रम रोल) कहां है, हां हां - एंड्रॉइड एप्लिकेशन
- ग्रहण और प्लगइन्स
- गैलेक्सी टैब
कार्य में क्या निर्धारित किया गया था:
- पृष्ठ का घटकों में विश्लेषण: पोस्ट, प्रश्न, घटनाएँ
- प्रत्येक तत्व, चाहे वह एक पोस्ट या एक प्रश्न हो, जिसमें साइट पर मूल रूप से सब कुछ शामिल होना चाहिए
- डिवाइस पर पसंदीदा और स्टोर करने के लिए जोड़ने की क्षमता
- सरल इंटरफ़ेस मूल की शैली और संरचना को संरक्षित करता है
- और अंत में, हाइलाइट "भविष्य के लिए सहेजें" मोड है (मुझे लगता है कि सार स्पष्ट है, मैं थोड़ा बाद में समझाऊंगा)
स्रोत सामग्री को चार सप्ताह से गुणा किया गया है (जिसका अर्थ है कि उन दो महीनों से काम करने के दिन - मैं किसी कारण से समुद्र में चला गया) में फल हुआ है - अब मैं जहां भी इंटरनेट है, हबर पढ़ने का आनंद ले सकता हूं।
आगे कुछ विवरण।
डेटा और इसकी प्रोसेसिंग
तकनीकी रूप से, आवेदन काफी सरल है। मुझे स्वाभाविक रूप से हैबर एपीआई तक पहुंच नहीं थी। मुझे घूमना पड़ा। तो, चरणों में।
हबल्टर हब के पते का अनुरोध करता है और
HttpUrlConnection
का उपयोग करके
HTML
कोड प्राप्त करता है। स्पष्ट कारणों के लिए यह ऑपरेशन, अतुल्यकालिक है - यह नहीं होना चाहिए और इसलिए इंटरफ़ेस को अवरुद्ध नहीं करता है। क्रियाओं का क्रम सरल है - एक बटन दबाना, एक पृष्ठभूमि का काम शुरू करना, हैबर से कनेक्ट करना, कोड प्राप्त करना और इसे एक अधिसूचना (
Broadcast
) के माध्यम से एक विशेष
Intent
में एम्बेडेड
String
के रूप में इच्छुक
Activity
को पास करना। कुछ खास नहीं।
पेटू: हालांकि, ऊपर वर्णित अनुक्रम में एक पकड़ थी। एप्लिकेशन (और सामान्य रूप से सिस्टम) के भीतर डेटा स्थानांतरित करने के लिए, इरादा ऑब्जेक्ट का उपयोग किया जाता है - Intent
, अलर्ट में भेजे गए - Broadcast
। तो यहाँ है। कई बार पदों की आंतरिक सामग्री लोड नहीं करना चाहती थी। यानी यहां तक कि लॉग से यह स्पष्ट था कि एप्लिकेशन ने हेबर पाया, पेज कोड लोड किया, लेकिन फिर ... कुछ भी नहीं। आम तौर पर। मौन। आवेदन फ्रीज नहीं हुआ, लेकिन कुछ भी नहीं हुआ। रेस्टार्ट ने मदद नहीं की। सामग्री दिखाई नहीं दी। समस्या को बेहतर समय तक छोड़ दिया गया था और लगभग दुर्घटना द्वारा समझाया गया था।
तथ्य यह है कि सभी नए और नए पोस्ट आसानी से और स्वाभाविक रूप से लोड किए गए थे। लेकिन कुछ पुरानी और बहुत सारी टिप्पणियों के साथ पढ़ना अब संभव नहीं था। लॉग्स को पढ़ने (सावधान!) में सिस्टम एरर के बारे में एक अजीब लाइन दिखाई देती है - !!! फेल्ड बाइंडर ट्रांजैक्शन !!! यह नोटिस नहीं करना मुश्किल है, है ना? इसलिए मैंने गौर नहीं किया। एकमात्र लाइन तुरंत अन्य "कचरा" के साथ भरा हुआ था। यह समस्या थी। Googling ने दिखाया कि यह तब होता है जब ट्रांसमिशन के लिए उपयोग किया जाने वाला डेटा एक निश्चित सीमा से अधिक होता है। उन्होंने रेखा के आकार को मापना शुरू किया - 600,000 वर्ण। लेकिन 100 टिप्पणियाँ भी नहीं थीं! सामान्य तौर पर, उन्होंने सफाई प्रक्रियाओं को जोड़ा, कई परीक्षण किए और प्रति पंक्ति 250 हजार वर्णों के बराबर सीमा का पता लगाया। अब, यदि आकार को साफ करने के बाद भी, लाइन काट दी जाती है और ... सभी टिप्पणियां उपलब्ध नहीं होंगी (* रोता है *)।
हल करने के लिए, समस्या अपेक्षाकृत आसान हो सकती है, कम से कम कुछ चरणों में डेटा स्थानांतरित करने के लिए। मुझे लगता है कि इसे अगले अपडेट में हल किया जाएगा।इसके अलावा, साइट से वेब पेजों के HTML कोड को ब्याज के घटकों में संसाधित किया जाता है। ऐसा करने के लिए,
Jsoup लाइब्रेरी का उपयोग करें - एक उत्कृष्ट चीज, जो आपको निर्दिष्ट टैग और विशेषताओं के लिए सभी आवश्यक डेटा को पुनः प्राप्त करने की अनुमति देती है। एक
गोली पंक्ति पर्याप्त है:
Document document = Jsoup.parse(html);
खैर, उसके बाद, तत्वों पर विश्लेषण।
पेटू के लिए: एकल-लाइन प्रसंस्करण के बाद प्राप्त Document
वर्ग की वस्तु आवश्यक आंतरिक तत्वों को प्राप्त करने के लिए दो विकल्प प्रदान करती है। "साधारण" पाने वालों की मदद से पहला:
एक और अधिक सुविधाजनक सामान्य
select()
विधि का उपयोग कर दूसरा
जैसा कि आप देख सकते हैं, दूसरा विकल्प बहुत अधिक सुविधाजनक है, जिससे आप कोड की मात्रा कम कर सकते हैं। एक पंक्ति "पृष्ठ-नेविगेशन" और "जानकारी-पाठ" के साथ-साथ "लाइव" शब्द के साथ वर्ग विशेषता वाले तत्वों की खोज करती है। हालांकि, कोई महत्वपूर्ण प्रदर्शन लाभ नहीं थे।"पकड़ने" आवश्यक और बहुत टैग और विशेषताओं को मैन्युअल रूप से नहीं किया गया था। उन्होंने प्रत्येक प्रकार का एक पृष्ठ लिया और अपनी आंखों से देखा कि मुझे किन तत्वों की आवश्यकता है, जो नहीं हैं। डेवलपर्स के लिए विशेष धन्यवाद - सब कुछ स्पष्ट और समझने योग्य था। उन्होंने हैबर के मुख्य संदर्भों के साथ भी ऐसा ही किया।
HTML को संसाधित करने के बाद, संबंधित प्रकार का एक अलग ऑब्जेक्ट बनाया जाता है, चाहे वह एक पोस्ट, प्रश्न या घटना हो, जिसे बाद में कुंजी = आईडी के साथ संबंधित तालिका में लिखा जाता है। टेबल्स
DataManager
, एक एकल वर्ग के माध्यम से पूरे अनुप्रयोग के लिए स्थिर और सुलभ हैं।
Java.io पैकेज और
Context.getDir () का उपयोग करके मेमोरी में
संग्रहीत ।
पेटू के लिए: मुझे लगता है कि एंड्रॉइड डेवलपर्स, पिछली पंक्तियों को पढ़ रहे हैं, काफी गड़बड़ी करेंगे और खुद को सोचेंगे, "मुझे भी ..." जैसा कुछ। तथ्य यह है कि आपको इस मामले में java.io का उपयोग नहीं करना चाहिए (और मैं पहले से ही यह समझ गया था), लेकिन स्वाभाविक रूप से एक बेहतर डेटाबेस। मैंने पढ़ने और लिखने में त्रुटियों से संबंधित त्रुटियों का एक गुच्छा पकड़ा, क्योंकि जावा में संदर्भ द्वारा वस्तुओं को पारित किया जाता है, जिसे लगातार अद्यतन किया जाना चाहिए, जो निश्चित रूप से इसे तुच्छ बनाने के लिए भूल सकता है। खैर, निश्चित रूप से, चेक और अपडेट पर खोई गई गति वास्तव में खुशी नहीं लाती है और आवेदन में गति को जोड़ती है, और इस मामले में कमी रैखिक है और याद किए गए तत्वों की संख्या पर निर्भर करती है। मैंने पश्चाताप किया, जितना सरल और तेज किया। तथ्य यह नहीं है कि यह तेज हो गया और निश्चित रूप से आसान नहीं हुआ।
सामान्य तौर पर, यह फिर से किया जाएगा। 100%।पोस्ट के मुख्य पाठ (और किसी भी अन्य सामग्री) के प्रदर्शन के साथ एक मामूली अड़चन थी। कई एप्लिकेशन इस उद्देश्य के लिए
WebView
उपयोग करते हैं - वेब पृष्ठों के लिए एक विशेष दृश्य, एक बहुत शक्तिशाली उपकरण जो नेटवर्क से सामग्री लोड कर सकता है, एक मौजूदा प्रदर्शित करता है। मेरे लिए, इसकी "खामी" शक्ति थी। उदाहरण के लिए, एनोटेशन को ड्रॉप-डाउन सूची आइटम के रूप में लागू किया जाता है -
WebView
का उपयोग करके अधिक कंप्यूटिंग संसाधनों की आवश्यकता होगी। इसलिए, पसंद
Html.fromHtml(…)
पर गिर गई, जिसे
Html.fromHtml(…)
विधि से एक
Html.fromHtml(…)
ऑब्जेक्ट मिला। यह काफी प्रभावी तरीका है, जो आपको वांछित टैग के प्रदर्शन
TagHandler
अनुकूलित करने के लिए
TagHandler
का उपयोग करने की अनुमति देता है (उदाहरण के लिए, "कोड" मेरा पसंदीदा है) और
ImageGetter
से चित्र अपलोड करें।
पेटू: पिक्चर्स और ImageGetter
बारे में। डिफ़ॉल्ट रूप से, पृष्ठभूमि में लोड करना संभव नहीं है - इंटरफ़ेस अवरुद्ध था। यह आसानी से और सरल रूप से हल किया जाता है - एक पृष्ठभूमि कार्य, कैश डायरेक्टरी में लोड हो रहा है और अंत में TextView
को अपडेट कर रहा है।
किसी कारण के लिए, यह समस्याओं के बिना नहीं है। कुछ तस्वीरें, मुख्य रूप से बाहरी संसाधनों से, न कि आवास, एक के माध्यम से भरी हुई हैं। अभी तक कारण पकड़ा नहीं जा सका है। मैं इस पर काम कर रहा हूं।बन
संपादन मोड आपको ब्याज की सामग्री निर्दिष्ट करने और उनकी सामग्री डाउनलोड करने की अनुमति देता है। कार्यक्रम स्मृति में सब कुछ रिकॉर्ड करेगा, और बाद में उन्हें पढ़ना संभव होगा, उदाहरण के लिए, मेट्रो में काम करने के तरीके पर।
एक साथ सभी सूचियों को साफ करना संभव है, एक बार में सभी टेप, पसंदीदा, या चुनने के लिए कई बिखरे हुए।
यदि आप ट्रैफ़िक पर पैसा खर्च नहीं करना चाहते हैं, और पोस्ट एनोटेशन में एक दिलचस्प लिंक दिखाई देता है, तो एक लंबा प्रेस सभी उपलब्ध लिंक की एक सूची प्रदर्शित करने में मदद करेगा। उत्तर और टिप्पणियों में लिंक के लिए भी यही सच है।
यदि वांछित है, तो अपने मेल पर पोस्ट का लिंक भेजना संभव है। मुझे सिद्धांत रूप में इसकी आवश्यकता नहीं है - एक खाते वाले लोगों को बाद में पसंद आने वाले पोस्ट पर टिप्पणी करने की आवश्यकता हो सकती है। भविष्य में मैं कैलेंडर में ईवेंट को जोड़ना समाप्त कर दूंगा, जबकि अल्फा संस्करण में।
वीडियो प्रदर्शन के लिए, मैं इसे एक नियमित लिंक के साथ बदल रहा हूं। केवल एक चीज जिसकी मैं कल्पना नहीं कर सकता, वह है पॉडकास्ट। ईमानदारी से, मैंने अभी तक कोशिश नहीं की है। आपको अभी भी
WebView
पर लौटना पड़ सकता है।
और, ज़ाहिर है, "बहुत" मोबाइल नेटवर्क के लिए चित्रों के बिना डाउनलोड है।
इंटरफ़ेस
कार्यक्रम का मुख्य दृश्य, जैसा कि पहले स्क्रीनशॉट से देखा जा सकता है, वह टैब है जो तीन मुख्य और सबसे दिलचस्प (मेरे लिए, मैंने खुद के लिए लिखा है) खंड का खंड दोहराता है। विकास प्रक्रिया के अंत में, विचार एक स्लाइड प्रभाव का उपयोग करना था - एक फिसलने वाली उंगली के इशारे का उपयोग करके अनुभागों के बीच स्विच करना। हालांकि, मूल अतिप्रश्न से बेहतर मिलान करने की इच्छा। इसके अलावा, मुख्य रूप और यह उस समय तक पहले से ही इतना जटिल था कि इसे बदलने के लिए एक सभ्य समय की आवश्यकता होगी।
कार्यक्रम में उपयोग किए जाने वाले रंग, साथ ही मुख्य तत्वों का स्थान - तिथि, लेखक का नाम, थीम भी हैबर से लिया गया है। चित्र और आइकन (मेनू में उन लोगों के अपवाद के साथ -
वे एसडीके से अटक गए थे ) उन्होंने खुद को चित्रित किया। और, हाँ ... मैं एक डिजाइनर नहीं हूँ (* दुख की बात है *)। लेकिन मैंने कोशिश की, यहाँ पहले से क्या है।
पेटू के लिए: फिर भी, आपको सूची वस्तुओं को विवरणों से समृद्ध नहीं करना चाहिए। यह शालीनता से चलता है, भले ही सीमा "अच्छी तरह से, इसका उपयोग करना असंभव है" पार नहीं किया गया था। मैं इसका उपयोग करता हूं। इस समस्या का समाधान हो सकता है, उदाहरण के लिए, उपकरण के स्क्रीन पर दिखाई देने वाले तत्वों को कैशिंग, लोड करने और हटाने के साथ एक विशेष एडाप्टर। उदाहरण के लिए।अगला - कम अक्षर, अधिक स्क्रीनशॉट:





उत्पादकता
तकनीकी विशेषताओं (3 जी के बिना गैलेक्सी टैब, मॉडल P1010) के मद्देनजर मैंने विशेष रूप से वाई-फाई के साथ काम किया। होम लाइन 8 एमबीपीएस है। कई कैफे में, सब्जेक्टली कम। मुझे फर्क महसूस नहीं हुआ।
मुख्य सवाल यह है कि ट्रैफिक की खपत कितनी है। इसका उत्तर नियमित ब्राउज़र के माध्यम से हैबर तक पहुंचना है।
एक समान रूप से महत्वपूर्ण सवाल यह है कि सब कुछ कितनी जल्दी काम करता है। जवाब काफी तेज है। जैसा कि पहले ही उल्लेख किया गया है, नए पदों, प्रश्नों और घटनाओं के लिए - माप के अनुसार, प्रसंस्करण जल्दी से अधिकतम 2-3s तक होता है। यदि बहुत सारी टिप्पणियां हैं, और यहां तक कि सामग्री भी स्वैच्छिक है - तो और भी कुछ हो सकता है। माप के लिए रिकॉर्ड - 10s। अच्छा, ठीक है? बचाव में मैं कहूंगा कि यह एक बार था। औसतन - 5 सेकंड से कम।
नंबर पाठ प्रदर्शित करने के लिए मान्य हैं, चित्रों को अतुल्यकालिक रूप से लोड किया जाता है और लोड होने के बाद दिखाई देता है, इसलिए पढ़ने पर प्रभाव को ध्यान में नहीं रखा गया।
सूची स्क्रॉलिंग गति -
ListView
- एक अलग उल्लेख के लायक है। यह धीमा हो जाता है, लेकिन मुस्कराते हुए। 70 तत्वों की सूचियों के साथ काम किया, और अधिक की तरह कोई जरूरत नहीं थी।
निष्कर्ष
प्रोग्राम लिखने की प्रक्रिया कमाल की है। वास्तव में, मुझे लिखना बहुत पसंद था, शायद वास्तव में एप्लिकेशन का उपयोग करने से भी अधिक। फिर भी, प्रोग्रामर रचनात्मक लोग हैं, चाहे वे कुछ भी कहें। कुछ पंक्तियों को लिखना और परिणाम देखना वास्तव में उत्साहपूर्ण है।
मैंने खुद को एक फ्रीलांसर की "सैद्धांतिक" भूमिका में आजमाया। और, मैं तुमसे कहता हूं, यह नहीं है। घर पर, एक कंप्यूटर और एक टीवी जो पृष्ठभूमि बनाता है, लगभग पूरे दिन (मैं पहले से ही सभी विज्ञापन सीख चुका हूं)। आखिरकार, कम से कम किसी तरह का संचार एक ही कार्यालय में होता है। रहते हैं, इसके अलावा। दोपहर का भोजन एक है, क्योंकि सब कुछ काम पर है। और यदि आप एक दिलचस्प समस्या पर भी ठोकर खाते हैं, तो हो सकता है कि वह सप्ताहांत पर न जाने दे। मैंने खुद को फिल्मों में एक पंक्ति में पात्रों की संख्या के साथ एक समस्या के बारे में सोचते हुए पकड़ा। वहाँ क्या है - मैंने उसके पिता और दोस्त को समझाया! इरादों, प्रसारण के बारे में। और मैं एक धातु विज्ञानी हूँ, वह एक जीवविज्ञानी है ...
मुझे उम्मीद है कि विश्वविद्यालय में मुझे जो ज्ञान प्राप्त हुआ था, उसे अमल में लाने में कामयाब रहा। व्यावहारिक और सैद्धांतिक दोनों। और, निश्चित रूप से, नए प्राप्त करें। और सबसे महत्वपूर्ण बात, उनकी कुछ कमियों के बारे में जानें। उदाहरण के लिए, "मैं इसे काम करूँगा" या उपयोगी विधियों का एक गुच्छा लिखिए, और फिर सब कुछ भूल जाओ और वैसे भी कोड लिखो। मैं पश्चाताप करता हूं, प्रक्रिया का सामान्य संगठन सीमित हो गया है।
मुख्य बात है
मुख्य बात जो मैंने अपने लिए समझी। किसी भी परियोजना (लेखक भी नहीं) को आगे बढ़ने और बेहतर बनाने के लिए लगातार प्रेरित करने की आवश्यकता है। कुछ भी प्रेरणा का स्रोत हो सकता है - मौद्रिक, नैतिक, प्रतिस्पर्धी संभावनाएं, काम की जरूरत के लिए एक प्रतिबंध, आदि। जब कोई परियोजना अपने कार्यों को पूरा करना शुरू करती है, तो सभी को संतुष्ट करते हुए - दोनों लेखक और उपयोगकर्ता - इसका विकास रुक जाता है। Khabrachtets के लिए मैं इस समय लेखक और एकमात्र उपयोगकर्ता हूं, और सब कुछ मुझे उसमें सूट करता है। लेकिन मैं नहीं चाहूंगा कि वह इसके विकास को रोके। इसीलिए मैंने आपको इसके बारे में बताया।
तो, आपके पास मंजिल है।