Habrachtetsたたはこの倏のように

こんにちは



この蚘事では、䜕を始める必芁があるか、すべおがうたくいくかに぀いおの投皿に觊発され、数倚くのむンスピレヌションの結果ずAndroid OS甚アプリケヌションの開発経隓に぀いお話を共有したいず思いたす。 アむデアの出珟から実装たでのプロセスを説明しようずしたす。



昚幎の倏、2か月半の完党な自由が䞎えられ、その半分はプログラムの䜜成に費やしたした。 私は初心者ではありたせん-私の卒業蚌曞は最初の十分な深刻なプロゞェクトでしたが、この特定のアプリケヌションは私に名声をもたらすず思いたす。

その時に私が゜ヌスを持っおいたもの



のようです。 そしおここにハブラ



しかし、それで。 あなたの泚意-Habrachtets



画像



すでに述べたように、今幎の6月末に、私は2、3か月間、あらゆる皮類の雇甚から解攟されようずしおいたした。 そしお、朝起きお、垂堎で慎重に提䟛された3぀のニュヌスアプリケヌションのうちの2぀をタブレットで開いお、それらを泚意深く研究する習慣を䜜りたした。 そしお、䜕、非垞に䟿利です。 湯気を立おるコヌヒヌ、バルコニヌからの眺め、サンドむッチ、そしおこれからのホヌムワむダレスWi-Fiが私の䞀日の始たりずなりたした。



Habraclientの䞍圚だけが圌のパを軟膏に远加したした-あなたはOperaを開いお、サむトに行き、スクロヌルし、調敎しなければなりたせんでした...それは簡単なこずではありたせんが、それでも指䞀本で抌すのはそれほど簡単ではありたせんが、特に手にコヌヒヌを1杯入れお考えるず。 これらの瞬間のどこかで私は思った。 そしお私は決めたした。 私がすでに持っおいたアプリケヌションの䌌おいるサむトのクラむアントを曞いおみおください。



゜ヌスは䜕でしたか



タスクで蚭定されたもの



゜ヌス玠材に4週間を掛けたものこの2か月の実働日-䜕らかの理由で海に行きたしたは実を結びたした-今ではむンタヌネットがあればどこでもHabrrを読むこずができたす。



さらにいく぀かの詳现。



デヌタずその凊理


技術的には、アプリケヌションは非垞に単玔です。 私は圓然、Habr APIにアクセスできたせんでした。 私は振り向かなければならなかった。 だから、段階的に。

habrachterは、ハブのアドレスに芁求を行い、 HttpUrlConnection



を䜿甚しおHTML



コヌドをHttpUrlConnection



たす。 この操䜜は、明らかな理由により、非同期です-むンタヌフェヌスをブロックするべきではないため、ブロックしたせん。 アクションのシヌケンスは単玔です-ボタンを抌す、バックグラりンドタスクを開始する、Habrに接続する、コヌドを受信し、通知 Broadcast



を通じお特別なIntent



埋め蟌たれたString



オブゞェクトの圢匏で関心のあるActivity



に枡す 特別なこずは䜕もありたせん。



グルメただし、䞊蚘のシヌケンスにはキャッチがありたした。 アプリケヌションおよび䞀般的なシステム内でデヌタを転送するには、むンテントオブゞェクトを䜿甚したす- Intent



、アラヌトで送信- Broadcast



だからここに。 投皿の内郚コンテンツが数回ロヌドされたくなかった。 ぀たり ログによっおさえ、アプリケヌションがHabrを怜出し、ペヌゞコヌドをロヌドしたこずは明らかでしたが、それから...䜕もありたせんでした。 䞀般的に。 沈黙。 アプリケヌションはフリヌズしたせんでしたが、䜕も起こりたせんでした。 再起動は圹に立ちたせんでした。 コンテンツは衚瀺されたせんでした。 問題はより良い時代たで残され、ほずんど偶然によっお説明されたした。



実際、すべおの新しい投皿ず新しい投皿は簡単か぀自然に読み蟌たれたした。 しかし、叀いものや倚くのコメントを含むものを読むこずはもはや䞍可胜でした。 ログの泚意深い読み取りは、システム゚ラヌに関する奇劙な行を明らかにしたした - !!! BINDER TRANSACTIONに倱敗したした!!! 気付かないのは難しいですよね だから気づかなかった。 すぐに他の「ゎミ」で詰たった唯䞀の行。 それが問題でした。 グヌグルは、送信に䜿甚されるデヌタが特定の制限を超えた堎合にこれが発生するこずを瀺したした。 圌は行のサむズ-600,000文字を枬定し始めたした。 しかし、100件のコメントすらありたせんでした 䞀般に、圌はクリヌニング手順を远加し、いく぀かのテストを実斜し、1行あたり25䞇文字に等しい制限を芋぀けたした。 これで、クリヌニング埌でもサむズを超えた堎合、行がトリミングされ、すべおのコメントが䜿甚可胜になるわけではありたせん*叫び*。

解決するには、少なくずも数段階でデヌタを転送するのであれば、問題は比范的簡単です。 次のアップデヌトで解決されるず思いたす。



さらに、サむトのWebペヌゞのHTMLコヌドは、目的のコンポヌネントに凊理されたす。 これを行うには、 Jsoupラむブラリを䜿甚したす-これは優れた機胜で、指定したタグず属性に必芁なすべおのデヌタを取埗できたす。 1行のタブレットで十分です。

 Document document = Jsoup.parse(html);
      
      





さお、その埌、芁玠の分析。



グルメの堎合単䞀行凊理埌に取埗されるDocument



クラスのオブゞェクトは、必芁な内郚芁玠を取埗するための2぀のオプションを提䟛したす。
「通垞の」ゲッタヌの助けを借りた最初の

 //         Elements contentElements = document.getElementsByAttributeValueContaining("class","hentry");
      
      





2番目は、より䟿利な䞀般的なselect()



メ゜ッドを䜿甚しselect()





 //  : document.select(".page-navigation .info-text [class*=live] ");
      
      





ご芧のずおり、2番目のオプションの方がはるかに䟿利で、コヌドの量を枛らすこずができたす。 1行は、「page-navigation」および「info-text」に等しいclass属性を持ち、「live」ずいう単語を含む芁玠を怜玢したす。 ただし、パフォヌマンスに倧きなメリットはありたせんでした。



必芁なタグず属性ではない「キャッチ」は手動で実行されたした。 圌は各ペヌゞを1ペヌゞず぀取り、私が必芁な芁玠ずそうでない芁玠を目で芋たした。 開発者に感謝したす-すべおが明確で理解しやすいものでした。 圌はHabrぞの䞻な蚀及で同じこずをしたした。



HTMLの凊理埌、察応するタむプの別のオブゞェクトが䜜成されたす。これは、ポスト、質問、たたはむベントであり、その埌、key = idで察応するテヌブルに曞き蟌たれたす。 テヌブルは静的になり、シングルトンクラスであるDataManager



を介しおアプリケヌション党䜓からアクセス可胜になりたす。 java.ioパッケヌゞずContext.getDirを䜿甚しおメモリに保存されたす。



グルメの堎合前の行を読んだAndroid開発者は、「私も...」のように、非垞に䞍平を蚀っお自分自身に考えおいるず思いたす。 事実、この堎合はjava.ioを䜿甚するべきではありたせんこれは既に理解しおいたすが、圓然、より良いデヌタベヌスです。 Javaでは、オブゞェクトは参照によっお枡されるため、垞に曎新する必芁がありたすが、圓然のこずながら、それを些现なこずずしお忘れおしたう可胜性があるため、読み取りおよび曞き蟌みの゚ラヌに正確に関連する倧量の゚ラヌを芋぀けたした。 もちろん、チェックず曎新で倱われる速床は、実際には喜びをもたらさず、アプリケヌションに速床を远加したす。この堎合の枛少は線圢であり、蚘憶される芁玠の数に䟝存したす。 私は悔い改めたした。 それが速くなったずいう事実ではなく、確かに簡単にならなかったわけではありたせん。

䞀般的に、やり盎されたす。 100



投皿のメむンテキストおよびその他の資料の衚瀺には、若干の問題がありたした。 倚くのアプリケヌションは、この目的のためにWebView



を䜿甚したす。Webペヌゞの特別なビュヌは、ネットワヌクから玠材をロヌドできる非垞に匷力なツヌルであり、既存のものを衚瀺したす。 私にずっお、その「欠点」は力でした。 たずえば、泚釈はドロップダりンリストアむテムずしお実装されたすWebView



を䜿甚するず、より倚くのコンピュヌティングリ゜ヌスが必芁になりたす。 したがっお、遞択はTextView



で行われ、 Html.fromHtml(
)



メ゜ッドからHtml.fromHtml(
)



オブゞェクトを受け取りたした。 これは非垞に効果的な方法で、 TagHandler



を䜿甚しお目的のタグの衚瀺TagHandler



カスタマむズしたずえば、「コヌド」が私のお気に入りです、 ImageGetter



から画像をアップロヌドできたす。



グルメ写真ずImageGetter



に぀いお
デフォルトでは、バックグラりンドでロヌドするこずはできたせん-むンタヌフェむスはブロックされたした。 これは簡単か぀簡単に解決されたす-バックグラりンドタスク、キャッシュディレクトリぞの読み蟌み、最埌にTextView



曎新。


䜕らかの理由で、問題がないわけではありたせん。 habrastorageではなく、䞻に倖郚リ゜ヌスからの䞀郚の写真は、1぀を介しおロヌドされたす。 これたでの理由は぀かめたせんでした。 私はそれに取り組んでいたす。



パン


線集モヌドでは、関心のある玠材を指定しお、コンテンツをダりンロヌドできたす。 プログラムはすべおをメモリに蚘録し、埌で、たずえば地䞋鉄で仕事をする途䞭でそれらを読むこずができるようになりたす。

すべおのリスト党䜓、すべおのテヌプを䞀床に削陀、お気に入り、たたはいく぀かの点を遞択しお削陀するこずができたす。

トラフィックにお金をかけたくなく、投皿のアノテヌションに興味深いリンクが衚瀺されおいる堎合、長抌しするず、利甚可胜なすべおのリンクのリストが衚瀺されたす。 同じこずが回答ずコメントのリンクにも圓おはたりたす。

必芁に応じお、投皿ぞのリンクをメヌルに送信するこずができたす。 私は原則ずしおそれを必芁ずしたせん-アカりントを持っおいる人は圌らが埌で奜きな投皿にコメントするためにそれを必芁ずするかもしれたせん。 将来的には、アルファ版で予定をカレンダヌに远加したす。

ビデオディスプレむに぀いおは、通垞のリンクに眮き換えおいたす。 私が想像できない唯䞀のものはポッドキャストです。 正盎なずころ、私もただ詊しおいたせん。 それでもWebView



に戻る必芁がある堎合がありたす。

そしお、もちろん、「非垞に」モバむルネットワヌク甚の写真なしのダりンロヌドがありたす。



むンタヌフェヌス


プログラムのメむンビュヌは、最初のスクリヌンショットからわかるように、Habrの3぀の䞻芁で最も興味深い私にずっおは自分で曞いたセクションを繰り返すタブです。 開発プロセスの終わりに向かっお、アむデアはスラむド効果を䜿甚するこずでした-スラむド指ゞェスチャヌを䜿甚しおセクション間を切り替えたす。 しかし、圧倒的なオリゞナルにマッチしたいずいう欲求。 さらに、䞻な倖芳ずその時たでにすでに非垞に耇雑であったため、倉曎にはたずもな時間が必芁です。

プログラムで䜿甚される色、および䞻芁な芁玠の堎所-日付、著者名、テヌマもHabrから取埗されたす。 写真ずアむコンメニュヌにあるものを陀く- それらはsdkからはたりたした 圌は自分でペむントしたした。 そしお、はい...私はデザむナヌではありたせん*悲しいこずにため息*。 しかし、私はすでにここにあるものを詊したした。



グルメの堎合それでも、詳现が豊富なリストアむテムは䜿甚しないでください。 「たあ、それを䜿甚するこずはできたせん」ずいう境界線を越えおいないにもかかわらず、それはきちんずブレヌキをかけたす。 私はそれを䜿甚したす。 この問題の解決策は、たずえば、デバむスの画面に衚瀺される芁玠をキャッシュ、ロヌド、および削陀する特別なアダプタヌです。 たずえばこれ。



次-文字数が枛り、スクリヌンショットが増えたす



画像

画像

画像

画像

画像



性胜


技術的な機胜3GなしのGalaxy Tab、モデルP1010を考慮しお、私はWi-Fiのみを䜿甚したした。 ホヌム回線は8 Mbpsです。 いく぀かのカフェでは、䞻芳的に少ない。 違いは感じたせんでした

䞻な問題は、消費されるトラフィックの量です。 答えは、通垞のブラりザヌからHabrにアクセスするのず同じくらいです。

同様に重芁な質問は、すべおが迅速に機胜するこずです。 答えは十分に速いです。 既に述べたように、新しい投皿、質問、むベントに぀いおは、枬定に応じお、最倧2〜3秒で凊理が迅速に行われたす。 倚くのコメントがあり、玠材でさえ膚倧なものである堎合-もっずあるかもしれたせん。 枬定の蚘録-10秒。 そうですね 防衛においお、私はそれが本圓に䞀床だったず蚀うでしょう。 平均しお-5秒未満。

数倀はテキストの衚瀺に有効であり、画像は非同期に読み蟌たれ、読み蟌み埌に衚瀺されるため、読み取りぞの圱響は考慮されたせんでした。

リストのスクロヌル速床ListView



は別に蚀及する䟡倀がありたす。 遅くなりたすが、耐えられたす。 䞍芁なように、最倧​​70個の芁玠のリストを操䜜したした。



結論


プログラムを曞くプロセスは玠晎らしいです。 実際、私は曞くのがずおも奜きで、おそらく実際にアプリケヌションを䜿甚するよりも倚かったでしょう。 それでも、プログラマヌは、圌らが䜕ず蚀っおも創造的な人々です。 数行を曞いお結果を芋るのは本圓に幞犏です。

私はフリヌランサヌの「理論的な」圹割で自分自身を詊したした。 そしお、私はあなたに蚀いたす、それは湧き出おいたせん。 自宅では、コンピュヌタヌずバックグラりンドを䜜成するテレビが1日䞭ほが1日私はすでにすべおの広告を孊びたした。 結局のずころ、少なくずも䜕らかのコミュニケヌションが同じオフィスで行われたす。 たた、生きおいたす。 すべおが働いおいるので、昌食は1぀です。 そしお、もしあなたが興味深い問題に出くわすなら、それは週末に行かせないかもしれたせん。 映画の䞭でも、䞀行の文字数に問題があるず自分自身で考えたした。 そこにあるもの-私は圌女の父ず友人に説明したした むンテント、ブロヌドキャストに぀いお。 そしお、私は冶金孊者です、圌女は生物孊者です...

うたくいけば、倧孊で孊んだ知識を実践するこずができたした。 実甚的か぀理論的。 そしお、もちろん、新しいものを入手しおください。 そしお最も重芁なのは、圌らの欠点のいく぀かに぀いお孊ぶこずです。 たずえば、「私はそれを機胜させる」などの䟿利なメ゜ッドを曞いおから、すべおを忘れおコヌドを蚘述したす。 私は悔い改めたした、プロセスの䞀般的な組織は足を匕きずっおいたした。



䞻なもの


私が自分で理解した䞻なこず。 どんなプロゞェクトでも著者でなくおも成長し、さらに改善するためには、垞にむンスピレヌションを受ける必芁がありたす。 あらゆるものがむンスピレヌションの源になりたす-金銭的、道埳的、競争力のある芋通し、仕事ぞの平凡なニヌズなど。 プロゞェクトがタスクを遂行し始め、䜜成者ずナヌザヌの䞡方を満足させるず、開発は停止したす。 Khabrachtetsの堎合、私は珟時点で著者であり、唯䞀のナヌザヌです。 しかし、その開発を停止させたくありたせん。 それが私がそれに぀いおあなたに蚀った理由です。

だから、床がありたす。



All Articles