ReactiveCocoa勉強会関西にてObserverパターンについてお話ししましたので、以下にその内容をまとめます。 Observerパターンは、GoFの23のデザインパターンのうちの一つで、モデルが状態の変化をしビューに通知するパターンです。GUIアプリケーションの開発で多用されます。もちろんスマートフォンアプリの開発においても大変役に立つので、いくつかの例を挙げて見ていきます。 Objective-CのKey-Value Observing static void * Context = &Context; - (void)anything { [object addObserver:self forKeyPath:NSStringFromSelector(@selector(property)) options:NSKeyValueObservingOptionNew conte
基本の割に初心者にとって使うのにハードルが高いview、ListView。 ネット調べると色んなパターンで書かれた例が出てくると思います。 何も知らずにAndroid 1.6とかの時代に書かれたような出どころが不明なサンプルコードをコピペしてうまくいかなくて心が折れるみたいなことを防ぐために、インターネットに出回っているサンプルコードをパターン化して列挙しました。パターン1が一番良くなくて、パターン3あるいはパターン4にするといいと思います。 インターネットで調べててAndroid 1.6とか2系の葬式UIが出てきたら、それは昔に書かれたものでそっと閉じたほうがいいです。 Adapterとは AdapterはviewとDataSourceの橋渡しをするものです。 private void setupListView(List<User> userList) { UserAdapter ad
GoogleがJavaの知的財産を侵害しているとしてOracleが訴えていた裁判で、2審の米連邦巡回区控訴裁判所は9日、37のJava APIパッケージに関するOracleの著作権を認める判決を出した(判決文: PDF、 Reutersの記事、 Bloomberg Businessweekの記事、 本家/.)。 1審のカリフォルニア州北部地区連邦地裁では、37のAPIパッケージについてGoogleがJavaからコピーしたとされるコードの宣言や構造、順序、構成を含む要素に関しては、著作権で保護されないとの判決を2012年5月に出しており(/.J記事)、Oracle側が控訴していた。2審では一転してこれらの要素が著作権で保護されるとの判断を示し、Googleが主張するフェアユースであるかどうかの判断については1審に差し戻すとの結論に達したとのこと。なお、1審でOracleはGoogleによる特
アプリを作っていてありがちなこと Android には、画面を構成するための Activity というコンポーネントがあり、概ね MVC フレームワークの Controller に相当する機能を持っています。 MVC といえば、肥大化する Controller というのがよくある問題として挙げられますが、Activity も例に漏れず、往々にして肥大化しがちです。 また、Model も、その責務を詰め込んでいくと肥大化しやすいレイヤと言えます。 この投稿では、Controller や Model の肥大化を極力防ぐためのレイヤわけを、Android アプリ向けに書いていきます。 Activity を綺麗に保つ Activity は、Controller として、様々な UI から受けるイベントを受けて、適切にハンドリングする役割を持っています。 OptionsMenu や ContextM
2022年8月29日 『Androidアプリのセキュア設計・セキュアコーディングガイド』【2022年8月29日版】を公開しました。 ・『Android アプリのセキュア設計・セキュアコーディングガイド』【2022年8月29日版】 ・「サンプルコード一式」 【2022年8月29日版】 報道関係各位 JSSEC、『Androidアプリのセキュア設計・セキュアコーディングガイド』2022年8月29日版を公開 一般社団法人日本スマートフォンセキュリティ協会 一般社団法人日本スマートフォンセキュリティ協会(JSSEC:会長 佐々木 良一)の技術部会 セキュアコーディングWG(リーダー 宮崎 力)は、2012年6月に公開した『Android アプリのセキュア設計・セキュアコーディングガイド』(以下 本ガイド)の14版目の改定版である2022年8月29日版を公開しました。 ■2022年8月29日版の改訂
横浜Android and モバイルOS プラットフォーム部で発表した資料です。 資料はAndroidアプリ開発者をターゲットにまとめました。OutofMemoryErrorの発生原理とメモリ管理について最新事情を加味してまとめました(新版、なのはAndroid 1.xのころの発表が古いのにまだ参照されていたりで、さすがに最新事情に合わせて更新したかったのです)。 Androidアプリにおけるメモリ事情は(初期に比べたら)改善していますが、OpenCVなど画像処理の需要、高解像度対応を踏まえると依然として十分とは言いがたいユースケースもあります。そんな中でメモリ資源をうまく使うための指標となれば幸いです。 資料にもある通り書きかけの状態ですのでコメントやmentionなど「こんな情報があるから書き加えて」「ここ調べて」「こういうのがおすすめ」「ここ間違えてる!」というご意見いただければ嬉し
「『グーグルCEOの行為は”邪悪”だった』:オラクルCEOエリソン氏、L・ペイジ氏を語る」なんて記事がCNETに出ています。エリソン氏がインタビューにおいて、グーグルに対する知財訴訟におけるその企業姿勢について、グーグルの企業モットーである”Don’t be Evil”を引き合いに出して批判したというお話であります。 オラクル対グーグルの裁判は、アップル対サムスン裁判の陰に隠れて目立たなくなっている感もあるので、現状どうなっているかをここで簡単にまとめておきましょう(参考資料:WikipediaのOracle v. Googleのエントリー等)。 この訴訟は、オラクルが、買収したサンマイクロシステムズのJava関連の著作権と特許権をAndroidが侵害しているということで、2010年7月に北カリフォルニア連邦地裁でグーグルを訴えたことに始まります。 まず、特許権の方ですが、米国特許6061
開発してるとActivityにBitmapを持たせたいことってよくある でもメンバで持ってると自前で解放しなくてはならない。 Bitmapのメモリ管理はネイティブ側で管理されてるので明示的に開放する必要がある。 マジで?って思ったので実験してみた 実験内容 以下のパターンでBitmapActivityがどのように変化するかを確認 実験1 ImageViewを持たないActivity 実験2 レイアウトでImageViewを持ったActivity 実験3 レイアウトでImageViewを持ち、メンバ変数でもImageViewをもつActivity 実験4 ImageViewを持ち、メンバ変数でBitmapをもつActivity 実験5 Bitmap#recycleの正しい使い方 使うアプリ こんな感じのアプリ 実験2〜4 MainActivity>BitmapActivity>(戻るキーで)
ちょいAndroid。Typescriptいいよ。JenkinsとかGradleとか。APTもいいなー。 実はrunOnUiThreadを最近まで知らなくていつもアホみたいにHandler#postしていてなんだか悔しかったのでActivity#runOnUiThread(Runnable)の実装を読んでみました。 Activity#runOnUiThread Activity#runOnUiThreadの実装がこちら。 public final void runOnUiThread(Runnable action) { if (Thread.currentThread() != mUiThread) { mHandler.post(action); } else { action.run(); } } 内部的にHandler#postしていますね。 ここでちょっと気になるのが Threa
時代は AsyncTask より AsyncTaskLoader Android 4.0、通称 Ice Cream sandwich というスマートフォンもタブレット端末もカバーする新しい OS がもうすぐデビューするとかいう時期なので、Android プログラミングもそれの普及をにらんだ実装に切り替えていくべき。 まずは、きっと Activity 上での非同期処理に多用されているであろう AsyncTask を、Android 3.0 以降で追加された AsyncTaskLoader へ乗り換えるところから始めるのもいいんじゃないかと思ってちょっと書いてみます。 あ、これは Activity での非同期処理について、という前提での内容になりますので、たとえば Service の中で非同期処理したい場合はどうすれば的な質問には役に立たないと思います。 いくら 4.0 がリリースされたとはい
■ Fragment のサブクラス ・DialogFragment ・ListFragment ・PreferenceFragment ・WebViewFragment ■ その他のヘルパークラス ・FragmentManager ・FragmentTransaction Activity のレイアウトにフラグメントのレイアウトを挿入する ■ Activity のレイアウトファイルに <fragment> タグで入れる <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android
Androidでの開発ではAndroid OSをある種のフレームワークと捉えてその作法に則ってうまく「使われる」プログラムを書かなくてはならない。なのでそのフレームワークがどういう仕組で、どういう流れで僕らの書いたコードを呼び出すのかということを理解することがよい設計に結びつく。と、大風呂敷を広げているが僕もさほどAndroidに精通していないのでこれは努力目標みたいなもんです。 大雑把に割愛して、今回のテーマに関係の深いところをピックアップする感じでいきますか。 テーマのAsyncTaskだけども、要は非同期処理をしたい時に使う。Javaで非同期処理といえばThreadなんだけどもAndroidでは一般にAsyncTaskを使う。AsyncTaskではUIスレッドを使った非同期処理を簡単に(?)実装できるという触れ込み。 UIスレッドとは? そこでまずUIスレッドとは何かを理解せねばなる
非同期処理と UI の更新 ではワーカースレッドを利用した非同期処理と UI を更新する時には Handler を利用して UI スレッドに対して処理をポストするという点について説明しました。 ここでは、そうしたバックグラウンドでの処理と UI とのやりとりをひっくるめて簡単に操作するための、 AsyncTask クラスの利用方法を説明します。 さらに、ついでに ProgressDialog のキャンセル処理とプログレスバーの表示についても説明します。 ProgressDialog と非同期処理のキャンセル ここで作るサンプルプログラムは次のようなものです。まずはボタンが一つだけあります。 このボタンをクリックすると、下のスクリーンショットのようにプログレスバー付きの ProgressDialog が表示されます。 この進捗が100%になったところで、ダイアログは消えます。また、 BACK
半年振りに書いたブログ記事が「MacBook Air 11インチ欲しい!」だけじゃ寂しいので、最近気付いたJavaプログラミングのネタについてでも書きます。Javaで「無名クラスを生成したメソッド内、同一スコープのローカル変数を渡す方法」です。 便利ですね無名クラス。クラス名を考えなくてもいいし、それらクラス数の管理が減ってコードも見やすくなる?(メソッド内局所に限っては複雑になりますが)気がします。 最近だとAndroid開発なんかも流行ってますが、アレもイベント処理が多くて無名クラスを使用する場面も多々あると思います。 そんな無名クラスですが「コンストラクタ(名前が無いので)」が定義出来ないなど、制限事項も多かったりします。そのひとつが表題の件になるのですが、具体的な例(Android)を挙げると、以下のようなコードが考えられます。 class Hoge{ public void fu
Androidアプリ作成の基本“Activity”とは何か?:Androidで動く携帯Javaアプリ作成入門(2)(1/2 ページ) 本連載で、SDKとEclipseを使ってAndroidの携帯端末で動くJavaアプリを作成し、Android Market配布を目指しましょう。開発者向け実機の登場やOHA参加14社増などの話題で盛り上がるAndroid。今回は、基本Activityとライフサイクルについて。 開発者向け実機、新Android端末、OHAに14社参加 2008年12月7日、グーグルは開発者向けにSIMロックフリーの端末「Android Dev Phone 1」を発売しました(参考:SIMロックフリーAndroid端末、399ドルで提供へ)。それに伴い、「Android SDK 1.0 Release 2」がリリースされました。前回の「Androidアプリの開発環境を準備」をお
全く違うことを勉強しようと思って、ちょっと古めの技術雑誌を買ったら、たまたまAndroidについて記事があったので、軽く目を通してみました。 1年前の雑誌なので、ハードウェア的にもAndroid的にも向上はしていると思うのですが、まぁそこはご愛嬌。 Androidデベロッパーとしては、こういう時代もあった、みたいなことも知っておくのも、まぁいいんじゃないすかね。 Androidは遅い? Embedded Caffeine Markというベンチマークによると、携帯Javaと比べてAndroidは2倍から10倍くらい遅くなってしまう Androidが遅くなる理由 単純に実行コードが多い Android: .java→.class→.dex→DalvikVMで実行 Java: .java→.class→JavaVMで実行 Android 高速化 1. インスタンス生成の抑制 インスタンスのヒープ
ブログ等に掲載されているHttpComponentのサンプルコードは、重要なところが端折られて紹介されている(というか間違っている事を知らずに書いている疑惑すらある)ことが多いので、正しいサンプルコードを書いておく。 まぁ、ここだけでなくApache HttpComponentsのドキュメントもちゃん読みましょう。あ、Androidのリファレンスにはロクに使い方が書いてないので、あんなゴミだけ読んでてもダメですよ。 要点 ポイントは2つ。 ResponseHandlerを使ってコードを書く HttpResponseの内部リソースを自動で解放してくれるので、ミスがなくなり、コードも簡潔になる。ブログ等ではHttpResponseを使わないコードもよく掲載されているが、リソースの解放処理が記述されていないことが多いのであまりよろしくない。 なお、ResponseHandlerを使わずに自分でリ
既に様々な blog で Android での位置情報取得については散々記載されておりますが、各実機を片手に検証していてどうにも腑に落ちなかったので、「やっぱこうだよね」と言える僕的ベストプラクティスをコード例をまじえて記載してみます。尚、必要なポイントのみ記載しているので他の部分についてはよしなに読みかえてくださいね。 AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" ...> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> <uses-permission android:name=
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く