[I/O 2015] Chrome Custom Tabs Will Add Easy And Rich Web Content To Any App With Chrome Capabilities
サービス経由で「ウォームアップ」,「URL先読み」を行って
高速に開く.
公開されている Googleサンプルのうち利用するヘルパークラスなどは
前回エントリを参照.
1. バインド
ウォームアップも同時に行う.
アクテビティのライフサイクルに合わせて.
public class SampleActivity extends AppCompatActivity implements CustomTabActivityHelper.ConnectionCallback { private CustomTabActivityHelper mCustomTabActivityHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mCustomTabActivityHelper = new CustomTabActivityHelper(); mCustomTabActivityHelper.setConnectionCallback(this); } @Override protected void onStart() { super.onStart(); mCustomTabActivityHelper.bindCustomTabsService(this); } @Override protected void onStop() { super.onStop(); mCustomTabActivityHelper.unbindCustomTabsService(this); } @Override protected void onDestroy() { super.onDestroy(); mCustomTabActivityHelper.setConnectionCallback(null); } @Override public void onCustomTabsConnected() { } @Override public void onCustomTabsDisconnected() { } }
2. プリフェッチ
開くであろうURLが確定した時点でバックグランドで先読み.
mCustomTabActivityHelper.mayLaunchUrl(uri, null, null);
3. 起動
前回とほぼ同じ.
タイトル, アニメーションを付けてなめらかな体感に.
R.anim.slide_* はサンプルのものを利用.
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder(mCustomTabActivityHelper.getSession()) .setShowTitle(true) .setStartAnimations(this, R.anim.slide_in_right, R.anim.slide_out_left) .setExitAnimations(this, android.R.anim.slide_in_left, android.R.anim.slide_out_right) .build(); CustomTabActivityHelper.openCustomTab(this, customTabsIntent, uri, new WebViewFallback());
以上をまとめてテンプレート的に
public class SampleActivity extends AppCompatActivity implements CustomTabActivityHelper.ConnectionCallback { private CustomTabActivityHelper mCustomTabActivityHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mCustomTabActivityHelper = new CustomTabActivityHelper(); mCustomTabActivityHelper.setConnectionCallback(this); } private void preFetchUrl(Uri uri) { mCustomTabActivityHelper.mayLaunchUrl(uri, null, null); } private void open(Uri uri) { CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder(mCustomTabActivityHelper.getSession()) .setShowTitle(true) .setStartAnimations(this, R.anim.slide_in_right, R.anim.slide_out_left) .setExitAnimations(this, android.R.anim.slide_in_left, android.R.anim.slide_out_right) .build(); CustomTabActivityHelper.openCustomTab(this, customTabsIntent, uri, new WebViewFallback()); } @Override protected void onStart() { super.onStart(); mCustomTabActivityHelper.bindCustomTabsService(this); } @Override protected void onStop() { super.onStop(); mCustomTabActivityHelper.unbindCustomTabsService(this); } @Override protected void onDestroy() { super.onDestroy(); mCustomTabActivityHelper.setConnectionCallback(null); } @Override public void onCustomTabsConnected() { } @Override public void onCustomTabsDisconnected() { } }
イベントからプリフェッチしてからのオープンすればよい.
しかし「先読みのタイミング」て…
(つづく)