Google Developer Day 2009 Japan

Google Developer Day 2009の
Google Chromeの内部構造,Androidデータ共有の2セッションのメモです。

Google Chromeの内部構造

ネットワーク
  • chrome1.0
    • WinINET
    • DNS prefetch
  • chrome2.0
    • HTTP:NewHTTP
    • FTP:Portable FTP
  • chrome開発中
サンドボックス

マルウェア前提につくる

  • 悪意のWebページから守る
  • chromeはライブラリ上

vista以降はインテグリティーレベルの概念が導入されてて、
インテグリティーレベルの高いものにはアクセスできないようになっている。
chromeではこれをLowに設定している。

WebKit
  • 採用した理由
    • ライブラリがシンプル
    • アンドロイドで使われている位かるい
    • コードも理解しやすい
  • chrome 1.0
    • Safari 3で使われているもの
  • chrome 2.0
    • WebKitのreviewerがG社内に3人
    • WebKitのcommiterがG社内に10人
    • G社の変更がSafari4にも使われている
  • 現在
    • 新機能の実装(HTM5 ,CSS3)
    • 互換性の向上
  • chromeHTML5対応状況
    • Audio Video
    • Application Cache
    • DB

.
.
.

V8

WebAppのJSは簡単なものだったが、最近は複雑でその流れは止まらないだろう
高速JSエンジン
単独でOSS (BSDライセンス)
V8の高速化に関して

  • G社が一から作ったのでアイデアをどんどん盛り込む
  • Young generation
  • Old generation

これを分けていることが高速化の肝
Gは3つのGCがある

拡張機能
  • HTML,CSS,JSで開発可能

UserScriptを開発中(GreaseMonkey同等のもの)

chromium
  • Chromeとの関係
    • chromiumは実験的な実装を盛り込んでいる
    • chromeは安定している
Chrommiumトリビア
  • chromiumを構成するファイル数:88,000
  • Testのファイルがほとんど
質問
  • Testはどうやってるの?
    • renderring Test
    • UI Test
  • 開発者が実装するたびに出来るだけテスト
  • 最低限リグレッションテストはする
  • バグを修正する最低限リグレッションテストはする
  • 可能な限り自動化
  • android等のメモリが少ない環境での工夫
    • メモリの制限と安全性のバランスをとる
    • 現在のchromeandroidに乗せたらどうなるかを評価し、もしメモリが足りないのであれば

具体的にどこを落とせばいいかというステップを踏んで開発を進めている
Windows7対応とか進めている

Androidデータ共有

これより下はAndroidの開発をしたことが無いため
ライブラリの中身的な内容でほとんど理解できなかったです。

  • 安生真さん
Intent
  • android.content.intent
    • Androidの特徴的な機能
    • Activityから異なるAtivityを呼び出すときのトリガー
    • Intentを出すActivityと、受け取るActivityにおいて
  • packageの異なる場合
    • アプリからアプリを起動する
  • 同一のアプリケーションの場合
    • 画面遷移

AndroidアプリはWindowを必ずしも必要としないが
Windowsを持っている場合はAtivityがある

Explicit Intents

intent intent = new Intent(this.foo.bar.anoherClass)
intent.setData(Uri.parse(
startActivity(intent)
すでに使ってほしいアクティビティを知っている場合使う

Impicit Intents

Intent intent = new Intent(Intent.ACTOIN_DIAL,Uri,parse)
startActivity(intent)
先ほどの違いはコンストラクタでsetDataしたものを渡している

Intent Extra Data type
  • byte[]
  • Serializable
  • Bundle
  • 注意点
  • 数値データ(int等)や文字列(String)だけではない
  • Intentでbitマップ等を渡すこともあり
  • あんまり大きいサイズは渡せない
  • 端末に依存する
  • 共有というよりは他のアプリに良い法的にw足す
SharedPreferences
  • マルチプロセスには非対応

private SharedPreferences prrefsPrivate;
prefsPrivate = getSharedPreerences();
Editor ...
データを書き出すところは必ずEditorが必要

MODE
  • 同一アプリケーションであれば気にしなくてもいい
  • 他のアプリケーションの場合は
    • WORLD_REDABLE
    • WORLD_WRITABLE
Content Provider

android.content.ContentProvider

  • 実装が必要なメソッドがいくつかある
    • query
    • insert
    • delete
    • update
    • getType

実態はDB SQLite

query
  • getContentResolver.query()
  • Activity.managedQuery()

AndroidManifest.xmlにContentProviderを使う旨宣言が必要l
共有は不要けどsqliteだけを使いたい場合
android.dtabase.sqlite.SQLiteDatabas

Network

Network上に保存したいjava.net.HttpURLConnection等を使う
UIThread(mainThread)でNetworkを使う場合はUIがブロックしてしまうのでやめたほうがいい
5秒以上サーバからデータが帰ってこない場合はアラートが表示されてしまう

アラートを避けるために

    • 通信が発生している場合に待ってもらいたい場合:プログレスバー等を表示させることによって避けることが出来る
    • バックグラウンドで動いている場合:Threadクラスを継承したり、Runnable interfaeを実装することで通信処理を別スレッド化する
Proc and Cons

速度比較
Intent << SharedPref << ContentProvider << HTTp

Pros

  • Intent
    • 簡単
    • 使えるデータが豊富

Sharedprefsjjj

ContentProvider

    • SQLが使える

Network

    • 大容量
    • 共有範囲が自分の端末に依存しないyyp
    • バッテリーに難あり

ここで所用により退散しました。