どうしても日本語の記事では量が少なく, 更新タイミングも少し遅くなる.
こんな有名なタレント群のブログをまとめてくれています.

ziem/android-development-blogs
OPMLやCSVでダウンロードできるのでRSSリーダやその他クライアントで一括で取り込んで読みましょう.
RSSフィード情報をOPML形式でインポート/エクスポートする | feedlyの使い方 | ぼくらのハウツーノート
私の Feedly はこんなんなりましたけど.

しかしこの人たちはすごいなあ.
どうしても日本語の記事では量が少なく, 更新タイミングも少し遅くなる.
こんな有名なタレント群のブログをまとめてくれています.

ziem/android-development-blogs
OPMLやCSVでダウンロードできるのでRSSリーダやその他クライアントで一括で取り込んで読みましょう.
RSSフィード情報をOPML形式でインポート/エクスポートする | feedlyの使い方 | ぼくらのハウツーノート
私の Feedly はこんなんなりましたけど.

しかしこの人たちはすごいなあ.

Data Binding Guide | Android Developers
たくさん記事を見かけるようになったのでかんたんに比較してみようかと思い.

public class MainActivity extends AppCompatActivity {
private TextView name;
private TextView age;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
name = (TextView) findViewById(R.id.name);
age = (TextView) findViewById(R.id.age);
User user = new User("ジョーンズ", 30);
name.setText(user.name);
age.setText(String.valueOf(user.age));
}
public void onClickName(View v) {
Toast.makeText(this, " 名前をクリックしました。", Toast.LENGTH_SHORT).show();
}
}
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClickName"
/>
<TextView
android:id="@+id/age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
dependencies {
...
compile 'com.jakewharton:butterknife:7.0.1'
}
public class MainActivity extends AppCompatActivity {
@Bind(R.id.name) TextView name;
@Bind(R.id.age) TextView age;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
ButterKnife.bind(this);
User user = new User("ジョーンズ", 30);
name.setText(user.name);
age.setText(String.valueOf(user.age));
}
@OnClick(R.id.name)
public void onClickName(View v) {
Toast.makeText(this, " 名前をクリックしました。", Toast.LENGTH_SHORT).show();
}
}
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
android {
...
dataBinding {
enabled = true
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MainActivityBinding binding =
DataBindingUtil.setContentView(this, R.layout.main_activity);
User user = new User("ジョーンズ", 30);
binding.setUser(user);
binding.setActivity(this);
}
public void onClickName(View v) {
Toast.makeText(this, " 名前をクリックしました。", Toast.LENGTH_SHORT).show();
}
}
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="com.example.User"/>
<variable
name="activity"
type="com.example.MainActivity" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}"
android:onClick="@{activity.onClickName}"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{String.valueOf(user.age)}"
/>
</LinearLayout>
</layout>
レイアウトを繰り返し使うような ListView/RecyclerView で実力を発揮するのかな?
This is more than binding simple data to your views and avoiding the boilerplate code. To me, this is actually mixing business logic in your UI layouts. Your views should be as dumb as possible, adhering to the Single Responsibility Principle with the only responsibility to show data. This could lead to a complicated, cluttered and unclean codebase.
We've seen some of the examples of the Data Binding API. I'm sure that this API was created in order to ease the developers' work and avoid boilerplate, but one can overuse it and accidentally create chaos in his code. Mixing Java in your view code has never been a good idea. Does JSP ring a bell?
How you can go wrong with the new Data Binding API
強力な分だけ「用法・用量」に注意, ということなのか.
ちなみに AndroidStudio最新環境では build.gradle 内 dataBinding { enabled = true } のみで使えるようになっておる.
スマホでブラウザを起動する, っての最近では面倒.
LINEとかメッセージでリンクを送ってくる人とか.

さりげなく開かずにテキトーな会話を続けたりします.
考えてみると「なんかブラウザって重いしトロい」から.
そこで, 最近登場したのが「Chrome Custom Tabs」というしくみ.
Chrome Custom Tabs - Google Chrome

表示までが非常に高速化されてるようにに見える.
実装しようとサンプルをダウンロードしてみる.
GoogleChrome/custom-tabs-client
アプリ内モジュールやヘルパーやプロセス間の通信など
依存関係があるのでわかりづらい.
とりあえずシンプルにURLを渡すだけでで起動してみたいだけなので以下で.
compile 'com.android.support:customtabs:23.0.1'
サンプル内モジュール customtabs 以下は不要.
CustomTabsHelper
KeepAliveService
CustomTabActivityHelper
WebViewFallback
shared というモジュールは作らずベタクラスとしてコピペ.
アプリ内モジュール依存はなしで.
...
Uri uri = Uri.parse("http://google.com/");
CustomTabsIntent customTabsIntent =
new CustomTabsIntent.Builder().build();
CustomTabActivityHelper
.openCustomTab(this, customTabsIntent, uri, new WebViewFallback());
...
UIカスタマイズはしない. するならここで.
...
//Intent intent = new Intent(activity, WebViewActivity.class);
//intent.putExtra(WebActivity.EXTRA_URL, uri.toString());
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
activity.startActivity(intent);
...
Chromeアプリ (stable/beta/dev) をインストールしてない場合は,
デフォルトブラウザなどに暗黙的に投げる.
起動はできる.
が, これだけでは恩恵にありつけない.

サイト内検索などはできるようにはなるが
「なんかブラウザって重いしトロい」が解消せず.
以下の機能があるという.
Pre-warming of the Browser in the background, while avoiding stealing resources from the application.
Providing a likely URL in advance to the browser, which may perform speculative work, speeding up page load time.
これを使わないと意味ないな...
すごいです.
画像が少し粗いものの, 操作は全くストレスがありません.
Chromeエクステンションです.

サイトも公開されています.

強烈なのがこの機能.
Vysor Share
Share your device, across the office, or across the globe. Screen and ADB access to remote devices. Simple as sending a link.
Chromeエクステの画面からクリップボードに取得できるURLを外部に送ると,

そのURLをクリックしたPCでネットを経由してそのAndroid端末を使えるようになる!!

当然, どちらのPCのChromeにもエクステをインストールしておくことが必要です.
驚きました.
Vysor Share Remote screen and ADB access There's a few tools already out that…
アプリひと通りやってみたけど, 思ったより動く.
音声も出力される.








まあ, 落ちるアプリもあるけど.

エミュレータより早く起動できるような.