スマホ(AQUOS sense4 SH-M15)購入

3 年前に購入したスマホ AQUOS sense plus SH-M07 の動作が遅く感じられるようになってきたので、スマホを新しくすることにした。

検討

AQUOS sense4 SH-M15要件は、
  • おサイフケータイ必須(モバイル Suica 使用)
  • 胸ポケットに入るサイズ
  • あんまり高価じゃないもの(ミドルレンジクラス)
で、マッチする主要な機種は
となる。

Pixel 4a だけは事後検討なのだが、メモリとストレージで見ると Pixel 4a が良い。CPU はわずかに AQUOS sense4 が良いが(型番は小さいが 730G より 720G のほうが高性能)、メモリとストレージの優位性を覆すほどの差ではない。

ただし、Pixel 4a は防水防塵が無く、日常使いとしては不安が出る。

Reno A はメモリは Pixel 4a と同様に魅力があるものの、CPU は 1 世代古くて見劣りする。


AQUOS sense4Reno APixel 4a
CPUSnapdragon 720G 8コアSnapdragon 710 Snapdragon 730G 8 コア
CPU 発表時期2020/012018/05
2019/04
CPU bigKryo 465 Gold(A76 ベース)2.3GHz 2 コアKryo 360 Gold(A75 ベース)2.2GHz 2 コア
Kryo 470 Gold(A76 ベース)2.2GHz 2 コア
CPU LITTLEKryo 465 Silver(A55 ベース)1.8GHz 6 コアKryo 360 Silver(A55 ベース)1.7GHz 6 コア
Kryo 470 Silver(A55 ベース)1.8GHz 6 コア
CPU スコア17651478
1744
メモリ4GB
6GB
6GB
ストレージ64GB
64GB
128GB
防水IPX5/8IPX7記述なし
防塵 IP6XIP6X記述なし
重量177g
169.5g
143g

AQUOS sense4 に決定


キャンペーンスペック的には迷うところもあったけど、ちょうど IIJmio でキャンペーンをやっていて、
  • AQUOS sense4:28,545 円(税込)+ 5,000 円ギフト券プレゼント(現時点で品切れ)
  • Reno A:28,000 円(税込)+2,000 円ギフト券プレゼント
となっていた。Pixel 4a は対象外なので普通に買うことになり、42,900 円(税込?)。

というわけで、実質 23,000 円くらいの AQUOS sense4(SH-M15)に決定。

使用感

comp今までの AQUOS sense plus とサイズを比べると(右が新しい sense4)、ディスプレイが大きくなっても(5.5 インチ→5.8 インチ)外形寸法はほぼ同じ。ただし重量が増えている(157g→177g)。

新しいスマホは全体的に動作が軽快になった。ハイエンド機種ではないので限界はあるが、悪くはない動き。ドラクエウォークのタイトル画面表示までの時間は 16 秒→ 9 秒に短縮された。ケンタなどの各種クーポンアプリや、動画再生なども快適になったと思う。

sense4電池持ちについてはへたっている旧機種と比べるのもフェアではないものの、朝の通勤時に DQW やニュースなどを見て、今までは 70~80% まで減っていたのが、90% 以上残存するようになった。重量が増えた分、バッテリー容量も増えたので(3,100mAh→4,570mAh)、その効果もあるだろう。

おサイフケータイの挙動が変わった。今までは NFC オフでもおサイフケータイが使えたのが、sense4 では NFC をオンにしないとおサイフケータイが使えない。Android 10 から導入されたセキュア NFC の影響かもしれない。

本体側面にハードウェアキーとしてアシスタントキーがあるのだが、Google アシスタント使わない自分にとっては邪魔でしかない(無効にはしてある)。タスクリスト表示などに割り当てられるといいのだが。

ゆかりすたー NEBULA Ver 4.40 公開

updateゆかりすたー NEBULA Ver 4.40 を公開しました。

ゆかりすたー NEBULA(ネビュラ)はカラオケ動画ファイルを整理し、ゆかり(持ち込みカラオケ用のブラウザリクエストツール)から検索できるようにするツールです。データベースを活用することにより、タイアップしている番組名や歌手名などの付加情報を含めて整理します。

詳細については、ファンクラブサイト「Fantia」内の記事をご覧ください

ゆかりすたー NEBULA Ver 4.23 公開

YSゆかりすたー NEBULA Ver 4.23 を公開しました。

ゆかりすたー NEBULA(ネビュラ)はカラオケ動画ファイルを整理し、ゆかり(持ち込みカラオケ用のブラウザリクエストツール)から検索できるようにするツールです。データベースを活用することにより、タイアップしている番組名や歌手名などの付加情報を含めて整理します。

詳細については、ファンクラブサイト「Fantia」内の記事をご覧ください

ゆかりすたー NEBULA Ver 3.92 公開

nebulaゆかりすたー NEBULA Ver 3.92 を公開しました。

ゆかりすたー NEBULA(ネビュラ)はカラオケ動画ファイルを整理し、ゆかり(持ち込みカラオケ用のブラウザリクエストツール)から検索できるようにするツールです。データベースを活用することにより、タイアップしている番組名や歌手名などの付加情報を含めて整理します。

詳細については、ファンクラブサイト「Fantia」内の記事をご覧ください

ActualWidth のバインド&取得と、ビヘイビアの紐解き

Windowビヘイビアについて少し考えてみた。

サンプルプログラムは GitHub に置いてある。Livet 使用。

ActualWidth はバインドできない

C# WPF MVVM での開発において、FrameworkElement.ActualWidth は XAML からのバインドができない(VM で ActualWidth を取得できない)。

例えば Window.Title なら「Title="{Binding Hoge}"」のようにバインドできるが、「ActualWidth="{Binding Hoge}"」はエラーとなる。Title も ActualWidth も依存プロパティー(依存関係プロパティー)だが、ActualWidth は読み取り専用のため、「Setter が無い」旨のエラーとなる。

書き込みできないだけなら、「ActualWidth="{Binding ActualWidth, Mode=OneWayToSource}"」のような片方向バインドはさせてくれ、と思うのだが、それもできない。標準コントロールの全プロパティーはバインド可能にしておいて欲しいのだが、そんな日は来るのだろうか。

Livet で楽ちん

バインドできないものをバインドさせるには、通常はビヘイビアを自作する。

が、ActualWidth 程度であれば、ビヘイビアを自作するまでもなく Livet の XXXXSetStateToSourceAction を使うのが簡単。サンプルプログラムでは、同類の ActualHeight について、Livet の WindowSetStateToSourceAction を使用してバインドすることにより、VM で ActualHeight が取得できるようになっている。
<behaviors:Interaction.Triggers>
    <behaviors:EventTrigger EventName="SizeChanged">
        <l:WindowSetStateToSourceAction Source="{Binding ActualHeight, Mode=TwoWay}" Property="ActualHeight" />
    </behaviors:EventTrigger>
</behaviors:Interaction.Triggers>

今回はビヘイビアについて少し考えてみるのが目的なので、ActualWidth についてビヘイビアを自作する。

ビヘイビアで ActualWidth をバインド可能にする

ビヘイビアの作り方については「ビヘイビア WPF」あたりでググればたくさん出てくるが、コードの内容についての解説があまり見当たらないので、少し考えてみた(コード全体については冒頭のサンプルプログラム参照)。

XAML からバインド可能にするには依存プロパティーを作る必要があり、それが
public static readonly DependencyProperty ActualWidthProperty =
        DependencyProperty.Register(nameof(ActualWidth), typeof(Double), typeof(WindowBindingSupportBehavior),
        new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
の部分。そして、依存プロパティーとリンクする普通のプロパティーが
public Double ActualWidth
{
    get => (Double)GetValue(ActualWidthProperty);
    set => SetValue(ActualWidthProperty, value);
}
の部分。

依存プロパティーの作成と登録を行うのが DependencyProperty.Register() で、その第一引数 nameof(ActualWidth) がプロパティー名。依存プロパティー名 = プロパティー名 + "Property" となっている必要がある。なっていないと、実行時にエラーになる。ビルド時にエラーにしてほしいところだ。

多くのサイトで「DependencyProperty.Register("ActualWidth"...」のようにプロパティー名を即値で書いているが、「nameof(ActualWidth)」と書く方が多少安全になるかと思う。

DependencyProperty.Register() の第二引数で変数の型、第三引数でビヘイビアクラスを指定する。第四引数の FrameworkPropertyMetadata 内でプロパティーのデフォルト値を指定する。

依存プロパティー登録により ActualWidth のバインドが可能となったので、次は、ActualWidth の値を更新して有用な値にするところ。
ウィンドウのサイズが変更された際に ActualWidth を変化させれば、常に ActualWidth を最新の値に設定できる。

OnAttached() で SizeChanged イベントハンドラー(ControlSizeChanged)を登録し、そのイベントハンドラー内で ActualWidth を更新する。

以上で、ActualWidth をバインドして使えるようになる。

サンプルプログラムを起動してウィンドウの横幅を変化させると、ActualWidth の値も変化する。

ビヘイビアで IsActive をバインド可能にする

Window.IsActive もバインドできないが、これもバインド可能にしてみる。

IsActive は本来読み取り専用だが、ここでは書き込みも可能にして、true にされたらウィンドウをアクティブ化する、ということをしてみる。

基本的なやり方は ActualWidth の時と同じだが、ViewModel から書き込まれた時に処理を行うために、DependencyProperty.Register() で、書き込まれた時のイベントハンドラー SourceIsActiveChanged を指定している。

private static void SourceIsActiveChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
    if ((obj is not WindowBindingSupportBehavior thisObject) || thisObject.AssociatedObject == null)
    {
        return;
    }

    if ((Boolean)args.NewValue)
    {
        thisObject.AssociatedObject.Activate();
    }
}

イベントハンドラーの引数 obj にビヘイビアクラスが DependencyObject 型として格納されているので、WindowBindingSupportBehavior 型にキャストして thisObject とする。

thisObject.AssociatedObject がウィンドウ自体なので、これでウィンドウに対する操作がやりたい放題できる。Activate() を呼べばウィンドウがアクティブ化される。

サンプルプログラムでは、チェックボックスでウィンドウのアクティブ状態を表示する。他のウィンドウをアクティブにすると、チェックが外される。

「5 秒後にアクティブ」ボタンをクリックすると、5 秒後にサンプルプログラムのウィンドウをアクティブ化する。ボタンクリック後、他のウィンドウをアクティブにして 5 秒待つと、サンプルプログラムがアクティブになる。


カンパのお願い
Amazon でお買い物の際は、下記で検索して頂けたら幸いです。
記事検索
最新コメント
月別アーカイブ
  • ライブドアブログ