スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Android] xmlデザインのメモ(Color)

意外にxmlで画面のデザインしているサイトが少ないのでメモします。

[color属性 RGB]
#AABBCCDD
AA  : 透明度        00~FF
BB  : R(赤)の値   00~FF 
CC  : G(緑)の値   00~FF
DD  : B(青)の値   00~FF
(例)
   
        android:id="@+id/button1"
        android:text="button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#BBE7E7E7"
    />

おわり。






スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

Andoroid 開発ガイドを読みながらの走り書き2

前回の続きです。
Android開発ガイドを読んでいます。

アクティビティとタスク(序章)

[ここで使われる用語]
ユーザエクスペリエンス   → 
   経験的開発のこと?
タスク  →
   ユーザが一つのアプリケーションとして捉えられる物。  
ルートアクティビティ
    タスクを開始するアクティビティ。 通常は、アプリケーションランチャで選択するアクティビティ
アプリケーションランチャ
    アプリケーションを動作させるアイコンのリスト。ショートカットみたいな物。
スタック  →
    LIFO(last in first out)の構造。詳しくはここを参照。ここでは、アクティビティを保持する入れ物。
フォアグラウンド  → ユーザにとって、現在アクティブな物。
バックグラウンド → ユーザに取って、現在アクティブではなく、動作ししている物。
   
[言っていること]
・自分のアプリケーションのアクティビティや他のアプリケーションのアクティビティを呼び出すことができ、
   アクティビティを格納するスタックにアクティビティが格納される。
・複数同じアプリケーションを開くと、別々のタスクで動作する。
・タスクの値は、ルートアクティビティでまとめて設定でき、タスク内のアクティビティは、
   まとめてフォアグラウンド、バックグラウンドに移動する。
   ただし、上記動作はデフォルトで、インテントオブジェクトやマニフェストファイルによって動作の変更は可能。
・主なインテントフラグ(呼び出し方法(イベント))は、
   FLAG_ACTIVITY_NEW_TASK
   FLAG_ACTIVITY_CLEAR_TOP
   FLAG_ACTIVITY_RESET_TASK_IF_NEEDED  
   FLAG_ACTIVITY_SINGLE_TOP
   がある。
マニフェストファイルで定義される主な属性は、
   taskAffinity
   launchMode
   allowTaskReparenting
   clearTaskOnLaunch
   alwaysRetainTaskState
   finishOnTaskLaunch
   がある。

親和性と新しいタスク (アクティビティとタスク)
[ここで使われる用語]
親和性  →  アクティビティの属性?

[言っていること]
アクティビティには属性があり、属性によりそのアクティビティの動きを制御することができる。
以下に挙がっていた例を示す。

FLAG_ACTIVITY_NEW_TASK フラグ
  通常は、アクティビティを呼び出すと、同じタスク内でアクティビティが動作する。
  しかし、FLAG_ACTIVITY_NEW_TASK フラグの属性を付加すると、
  別のタスクでアクティビティを動作させようとする。

allowTaskReparenting 属性
  この属性がtrueになっていると、呼び出し側で用意したタスクに、属性がtrueになっているアクティビティを
  移すことができる。
  例えば、ある旅行アプリケーションが気象情報のアクティビティを持っていたとする。
  その際、ユーザが違うアプリケーションを立ち上げ、そのアクティビティが気象情報アクティビティを
  呼び出すと、気象アクティビティは、違うアプリケーションのタスクに移動する。
  更に、ユーザが旅行アプリケーションをアクティブにすると、気象情報アクティビティは、旅行アプリケーションの
  タスクに移動する。

つまり、アクティビティは、属性によって、タスク間を移動できるということ。
"親和性"という意味が分かりづらい。 今の段階では説明できません。



起動モード (アクティビティとタスク)
[言っていること]
アクティビティ属性のlaunchModeで表される起動モードは、4種類ある。
・standard
・singleTop
・singleTask
・singleInstance


簡単に説明すると、アクティビティを起動した際、
・standard属性の場合は、呼出し元と同一タスク内で、複数生成可能で、必ず独立したアクティビティーが生成される。
・singleTop属性の場合は、呼出し元同一タスク内で、複数生成可能で、最上位に同じアクティビティーがある場合は再利用される。
・singleTask属性の場合は、
必ずタスクのルートとなるので、1つのみ生成可能で、
   同一タスク内に同じアクティビティを生成する場合は、上のアクティビティを消去し、タスクが再利用され、
・singleInstance属性の場合は、必ずタスクのルートとなり、他のアクティビティーを同一タスク内に入れることができない。
という様な形になる。
以下に表を示します。

ふるまい standard singleTop singleTask singleInstance
どのタスクに属するか 呼出し元 呼出し元 独立 独立
複数生成できるか できる できる 1つ 1つ
自タスクに他のアクティビティを入れれるか できる できる できる 別タスクで開く
既存の同一アクティビティを利用するか しない する 同一タスク内で、再利用される 新しくタスクを生成する。



この辺で、タスク、インテント、アクティビティーについて混乱してきたので、ちょっとまとめます。
アクティビティ ・・・ UIのインスタンス
インテント        ・・・処理データインスタンス
タスク              ・・・インスタンススタック


この三つを下のように表現し、まとめてみます。
ActivityIntentTask

■アクティビティーは、インテントを保持して、タスクにスタックされる。
StackActibityWithIntent


■アクティビティーは、インテントの属性(FLAG_ACTIVITY_NEW_TASK)により、違うタスクにスタックされる。
ActibityMoveOtherTask


アクティビティーは、アクティビティ属性(launchModen)によって、生成のされ方が異なる。
    ・"standard","singleTop"と、"singleTask","singleInstance"の違い
ActibityDiff


    ・"standard"と"singleTop"の違い

ActibityCreateModeDiffSta_Sig
 

   ・"singleTask"と"singleInstance"の違い

ActibityCreateModeDiffSt_Si

となります。


スタックのクリア (アクティビティとタスク)
[言っていること]
・ユーザが、長期間スタックを放置していると、アクティビティスタックがクリアされる。
・ただし、アクティビィーの属性により、これを解除することができる。
    以下に、その属性を挙げる。
   [alwaysRetainTaskState 属性 = true ]
    長時間放置してもクリアされない様になる。
   [clearTaskOnLaunch 属性 = true]
    ユーザがタスクを離れるとクリアされる。時間ではなく、ユーザがタスクから離れるか離れないかの制御になるということ。
   [finishOnTaskLaunch 属性 = true]
    clearTaskOnLaunch 属性と少し異なり、ユーザが単一のアクティビティから離れるとアクティビティスタックがクリアされる。

・インテントにFLAG_ACTIVITY_CLEAR_TOP属性が含まれていても、クリア制御ができる。

タスクの開始(アクティビティとタスク)
[言っていること]
・"android.intent.action.MAIN"に"android.intent.category.LAUNCHER"に登録すると、ランチャにアイコンが登録され、
    ユーザ任意にタスク(アクティビティ)を開始できる。
・また、ユーザの操作によりバックグラウンド等にタスクが写った場合、ランチャを押すことで再度タスクをフォアグラウンド
   に戻すことができる。






Activityはボリュームが多かったです。
疲れたので、今回はここで次回に譲ります。

終わり。










  





テーマ : プログラミング
ジャンル : コンピュータ

Andoroid 開発ガイドを読みながらの走り書き1

Android開発ガイドを読んでいるので、とにかく走り書き(- -;)""
意味わからなかったらゴメンなさい (- -;)""

開発の基礎(序章)
[言っていること]
・Javaアプリケーションで記述される。
・提供される"aaptツール"を使用して実装する。
・拡張子は、".apk" 
・".apk"ファイルをデバイス(スマートフォン等)にダウンロードして利用する。
・".apk"ファイルがウィンドウズでいう、".exe"ファイル
・プラットフォームはLinux
・JavaVM上で、実行されるため、他のアプリケーションからは独立されている。
・".apk"ファイルの実行プロセスは、プロセスIDが振られ、権限が設定されている。
・2つの".apk"ファイルで同じユーザIDを持つことは可能。
その場合は、2つのアプリケーションを相互に認識することが可能。

つまり、Linuxチックにプロセス管理して、JavaVM上で動いているってことかな。


アプリケーションのコンポーネント
[ここで使われる用語]
・コンポーネント    →  インスタンス化できるソフトウェア部品。 
                             オブジェクト思考でいうオブジェクト。
・アクティビティー  →  UI部品。
・ビュー               →  アクティビティーの(ほぼ)基底クラス。
                              WindowsでいうControl?
・サービス            →  バックグラウンドで動くスレッド。  
・バインド            →  接続。問い合わせ。
・ブロードキャスト  →  他のアプリケーションへの一斉通知。
                              (「言い広める」という意味)
・プロバイダ         →   データ格納するもの。ファイルやDB等。

[言っていること]
・許可があれば、他のアプリケーションを利用できる。
   他の人が開発したソフトウェア部品を使うことができるってこと。
   使用するには、そのソフトウェア部品をインスタンス化する。
   オブジェクト指向の原理。
     
・コンポーネントには、4つの種類がある。
   アクティビティー
   サービス
   ブロードキャストレシーバ
   コンテンツプロバイダ

・アクティビティー
   UI部品。.NET開発者でいうコントロール。
   作り方は、ほとんど.NETフォームアプリケーションと一緒。WPFの方が近いかな。
   通常は、画面全体で作成。 ただし、画面より小さいウィンドウでも作成可能。
   アクティビティーは、ビューを基底クラスとする。
   ビューの基底クラスは、リーフビューらしい。。。(見る必要あるかな?)
   アクティビティーの種類は、
   ボタン、テキストフィールド、スクロールバー、メニューアイテム、チェックボックス等がある。
   アクティビティーをウィンドウ内に配置するのは、   
   Activity.setContentView()を使う。
   (Activity.setContentView()は、eclipseで自動生成した場合、
   OnCreate()内に書かれます)
  
・サービス
   バックグラウンドで動くスレッド。
   例えば、BGMを再生する事、ネットワークのデータを取得する事などがある。
   実行中のサービスへの接続も可能。
   サービスへの接続(バインド)は、接続されるサービスが提供する
   インタフェースを利用する。
   別スレッドを勝手に作って実行してくれる。
   サービスを開始するには、Context.startService()を呼び出す。
   (後に説明するインテントオブジェクトを渡す)
   詳しくは、こちら

・ブロードキャストレシーバ
   システムからの通知等(ブロードキャスト)を受信するコンポーネント。
   システムからの通知は、電池残量、写真撮影、タイムゾーンの変更などがある。
   その他に、アプリケーションからのブロードキャストも受け取る事ができる。
   ブロードキャストレシーバは、複数設定できる。(色々受信できるように)
   BroadcastReceiver を使う。

・コンテンツプロバイダ

   データ格納領域を利用するコンポーネント。
   例えば、ファイル、SQLite等を利用する。
   通常は、プロバイダにアプリケーションから直接アクセス出来ない。(セキュリティーのため?)
   よって、ContentResolverのめゾッドを呼び出して、利用する。

・Androidの基本動作は、上記4つのコンポーネントが起動中かどうか確認し、
   必要があれば起動し、利用可能か確認した後、コンポーネントを使用する。
  
つまり、4つのコンポーネントを作って、使いやすく、制限しやすくしたから、
これを使って作ってくれよ。ってことかな。


コンポーネントのアクティブ化:インテント
[ここで使われる用語]
・インテント  → 
   非同期メッセージ。(.NETでいうイベントみたいなもの。イベントと読んだほうがわかりやすい。) 
・インテントオブジェクト → 
   インテントによって渡されるメッセージ内容。     
・コンテンツプロバイダ  →
   データ格納オブジェクト。ファイルやDB。

[言っていること]
・それぞれのコンポーネントは、リクエストがあるとインスタンス生成される。
   コンテンツプロバイダは、ContentResolverからリクエストがあるとアクティブ化される。
   アクティビティ、サービス、ブロードキャストレシーバは、インテントによってアクティブ化される。
   つまり、インテントによってコンポーネントを呼び出す。

・アクティビティのインテントオブジェクト
   アクティビティ(UI)から返されるオブジェクト。
   例えば、画像を選ぶUIの場合、インテントオブジェクトは、ユーザが選んだ画像。
   アクティビティがアクティブ化され、インテントオブジェクトを受け渡す手順は、
   1. Context.startActivity()、またはActivity.startActivityForResult()にてインテントオブジェクト
       を渡し、受け取り側をアクティブ化する。
   2. onNewIntent()が呼び出され、受け取り側(後画面)にインテントオブジェクトを渡す。
   3. 受け取り側は、そのインテントオブジェクトを受け取り処理し、呼び出し側に戻す。
   4. 呼び出し側は、onActivityResult()によって、結果のインテントオブジェクトを受けとる。

・サービスのインテントオブジェクト
   サービスに渡すオブジェクト。  
   1. Context.startService()にてインテントオブジェクトを渡し、呼び出すサービスをアクティブ化する。
   2. onStart()が呼び出され、インテントオブジェクトを呼び出しサービスに渡す。
   3. Context.bindService()にてインテントを渡すと、割り込み処理ができる。

・ブロードキャストのインテントオブジェクト
   ブロードキャストに渡すオブジェクト。
   これにより、関係のあるブロードキャストレシーバにインテントオブジェクトが渡される。
   1. Context.sendBroadcast()、Context.sendOrderedBroadcast(),
       Context.sendStickyBroadcast() などにより、インテントオブジェクトをブロードキャストに渡す。
   2. AndoroidシステムのonReceive()によって、関係のあるブロードキャストレシーバに
       インテントオブジェクトが渡される。

・コンテンツプロバイダのインテントオブジェクト
   リクエストの対象になるとアクティブ化される、
   特にインテントオブジェクトという概念は無い。(ファイルだからね)

つまり、全体的な手順としては、
1.何らかのメソッドで、インテントオブジェクト(メッセージ付のイベント)を渡し、受け取り側をアクティブ化する。
2.受け取り側は、何らかのメソッドで、インテントオブジェクトを受け取る。
っていうことかな。


コンポーネントの終了
・アクティビティのコンポーネント終了
   finish() メソッドや、startActivityForResult()メソッド等を呼び出す。

・サービスのコンポーネント終了
   stopSelf()メソッドや、Context.stopService()を呼び出す。

・ブロードキャストのコンポーネント終了
   特に無い。 システムコールのイメージだからあったらだめだよね。

・コンテンツプロバイダのコンポーネント終了
   終了処理をする必要はない。 リクエストに応答している間のみアクティブになるので。

つまり、アクティビティとサービスだけは、終了に気をつけてね!ってことかな。


マニフェストファイル
Androidシステムに、コンポーネントを認識させるファイル。
xmlファイルで、必ず"AndroidManifest.xml"という名前になる。
コンポーネントの指定だけでなく、必要なライブラリや、権限等の指定もする。
(詳細は、サイトを見てください)



インテントフィルタ
上記マニフェストファイルに記載されるフィルタ。
フィルタと言っても、インテントフィルタとして登録すると、起動時にそのコンポーネントがアクティブになるということらしい。
また、アプリケーションへのエントリポイント(ショートカットみたいなもの)も登録できる。



一応、キリがいいので今回はここまでにしておきます。
ここまでで言っていることは、
・Androidには、4つのコンポーネントがあり、それぞれ、イベントによって起動します。
・マニフェストファイルにより、初期設定ができます。

って事くらいかな。
って、長々と書きましたが、まとめると二行で終わりです(- -;)""

アクティビティーとタスクからは、次回に譲ります。

終わり。






テーマ : プログラミング
ジャンル : コンピュータ

Androidの開発事はじめ

Androidアプリが非常に使いづらいということで、独自で開発を始めました。

まずは、古くなったeclipseのダウンロードから(- - ;)"""
eclipseのバージョンは3.5.2です。
参考にしたサイトです。

Tuya's Google Website


丁寧に書いてくださっていましたので、あっけなく動作できました。


次にデバック環境の整えです。

やはりデバックといえば、ステップ実行。

ということで、Fキーにて操作しようと思ったのですが、
最近VisualStudioをめっぽう使っていましたので、
なかなか感覚が取り戻せません(- - ;)""

ですので、ここに簡単にデバックに必要なFキーのまとめを書いてみようと思います。

Microsoft Visual Studio
F5   :  デバック実行。 または、次のブレークポイントまで実行
[Shift] + F5  :  デバック終了。
F9   :   ブレークポイント
F10 :   ステップ実行(ステップオーバー)
F11 :   ステップイン
[Shift] + F11 : ステップアウト

Eclipse
F5   :  ステップイン
F6   :  ステップ実行
(ステップオーバー)

F8   ;  次のブレークポイントまで実行。
F11 :  デバック実行。


と、基本的にはこんな感じでしょうか。

また、以前のeclipseでは、デバックランチャーが前回デバックした構成をF11キーで
すぐ起動できたと思うのですが、新しいバージョン(3.5.2)ではできなくなっていました(- -;)"""

そこで、eclipseのデバック環境を変更します。
[ウィンドウ][設定][実行/デバック][起動] から、
"起動操作"の部分の"常に前回起動したアプリケーションを起動する"

にチェックを入れます。
すると、F11キー一発で、Androidのデバッカが起動します。
(参考図)


eclipseDebug1



こんなところでしょうか。

終わり。






テーマ : プログラミング
ジャンル : コンピュータ

プロフィール

ss_9

名前 :ss_9
紹介 :
20代はエンジニア、30代はプロ、40代は管理、50代は人脈。

Twitterボタン

最新記事
カテゴリ
AD
月別アーカイブ
RSSリンクの表示
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。