Android UIスレッド操作まとめも

Androidアプリに埋め込む配布用のSDKを作っていて、メインアプリになるべく影響ない作りにしたいと思って開発しており、ネックになった部分を整理したいのでまとめも!
(javaはじめたばっかりなので、なんでもご指摘くださいm(_ _;)m)

上記の通り、メインアプリに影響をなるべくなくすために何をしたらいいか考えたみた結果、
SDKの処理は非同期でやることにした。 (jarファイルで配布する予定)
今回はUIの操作も必要なので、方法として2点あるようだ・・・(かな?

HandlerThreadを扱う方法とAsyncTaskを使う方法があるようで。
AndroidではUIの処理はシングルスレッドで、別タスクから処理は、そのシングルスレッドにジョブ登録するように利用する必要があるとの事。
AsyncTaskを使う場合は、メインのシングルスレッドにジョブを投げるよう意識する必要はないみたいですが。

 

■HandlerでUIスレッド(シングルスレッド)にジョブをpostするパターン

下記記事を参考にさせていただきました!ありがとうございます!
http://pentan.info/android/app/handler.html
http://www.adamrocker.com/blog/261/what-is-the-handler-in-android.html

UIスレッド操作はメインのスレッド以外から直接操作はできないので、
Handlerを使って、メインスレッドにタスクとしてpostしてあげる。
というのが必要との事。

Handler h= new Handler();

h.post(new Runnable() {
  @Override
  public void run() {
    textView.setText("helloworld!"); //UI操作OK!
  }
});

また、操作方法にはpostDelayedなどを使って一定時間ごとの処理も可能。

 

■AsyncTaskを使うパターン

参考にさせていただいたサイト!ありがとうございます!
http://android.keicode.com/basics/async-asynctask.php
http://labs.techfirm.co.jp/android/cho/1079
http://wikiwiki.jp/android/?AsyncTask%A4%C7%A5%D0%A5%C3%A5%AF%A5%B0%A5%E9%A5%A6%A5%F3%A5%C9%BD%E8%CD%FD%A4%F2%B9%D4%A4%A6

 

new MyAsyncAppTask().execute(api_key);
class MyAsyncTask extends AsyncTask<String, Integer, String[]>{ //
 @Override
 protected void onPreExecute() { 
 //準備処理を書く
 }
@Override
 protected void onProgressUpdate(Integer... values) {
 //進捗状況
 }
@Override
 protected void onCancelled() {
 //キャンセル
 }
@Override
protected String[] doInBackground(String... api_key) {
 //処理を書く※注意ここではUI処理はしない
 return strArr;
 }
@Override
 protected void onPostExecute(String[] str) {
 //処理完了時実行、doInBackgroundの戻り値など使って処理もできる。(UI処理も)
 }
}

 extends AsyncTask<型, 型, 型>
1つ目の型 = excute()の引数の型
2つ目の型 =  onProgressUpdateの引数の型
3つ目の型 = doInBackgroundの引数の型

・onPostExecuteの引数には「…」はいれない。

せっかく調べたので、メモ。

android-sdk マニフェストで、SurfaceViewの画面サイズが小さくなるのを防ぐ

アンドロイドのSurfaceViewを使っていて、端末によって画面サイズが小さくなってしまっていたので、色々調べてみた。

最初は完全にjavaコードのほうを疑っていて、

setFixedSize(getWidth(),getHeight());

など色々試してみたが、実は簡単に解決できた。
マニフェストで下記のandroid:anyDensity をfalseにして解決。

<supports-screens
 android:anyDensity="false"
 android:largeScreens="true"
 android:normalScreens="true"
 android:smallScreens="true" />

android:anyDensityにて解像度や密度を調整できるようです。
また、SdkVersionのバージョンによってデフォルトの設定など異なるようなのです。

下記サイト参考にさせていただきましたありがとうございます!

http://wavetalker.blog134.fc2.com/blog-entry-52.htmlhttp://d.hatena.ne.jp/Kazzz/20101127/p1

admob androidアプリに導入時のメモ(version4.3.1に妥協

結構はまったので、メモ。
admobは日本語ドキュメントがないので、結構はまりました。
特に、admob SDKバージョン4.3.1ではまってしまったのですが、admobの広告表示領域に、下記のようなエラーが表示されて解決できませんでした。。

"You must have AdActivity declared in AndroidManifest.xml with configChanges." 

下記、googleのドキュメントを何度読んでもエラーの原因がわからず、、
http://code.google.com/intl/ja/mobile/ads/docs/android/fundamentals.html

ネット上でも、同様な記事がたくさんありましたが探したものすべてを試してみましたが、結局解決せず、さすがに妥協してバージョン4.3.1ではなく、4.0.4を入れるとあっさり動きました。。(汗
version4.0.4は上記ドキュメントのサンプルより利用しました。

そもそも、上記ドキュメントのサンプルもSDKのバージョンが4.0.4なので本当に4.3.1が動くのか検証もできませんでした。
せめて最新VerのSDKサンプルがあれば納得がいくのですが。

Android版のSDK4.3.1で、コード(XMLに記述しない方法)で書いてうまくいった方是非ご教授いただけますと幸いです!(汗汗

 

コマンドラインからjavaを実行&外部ライブラリ指定メモ

Androidじゃない普通のJavaをはじめてみました!

まずコマンドラインからの操作をメモ。

文字出力サンプル(HellowWorld.javaファイル)

class HelloWorld {
 public static void main ( String[] args) {
 System.out.println( "hello world" + args[0]);
 }
}
#javac HelloWolrd.java   //javacで .javaファイルをコンパイル
#java HelloWolrd HOGE      //コンパイルして作られたHelloWorld.classを実行
hello worldHOGE     //出力結果

外部ライブラリを使用する場合

#javac -class 外部ライブラリ名.jar Hoge.java
#java -classpath 外部ライブラリ名.jar Hoge //コンパイル時と実行時両方外部ファイルを教えてあげる必要がある。

google analytics(アナリティクス)のイベントトラッキングを試してみたメモ

グーグルアナリティクスイベントという機能がありますが、一度も使った事がなかったので、
設定したメモを残します。

まずAnalyticsでイベント情報の確認は下記で確認できます。

google analytics イベント トラッキング

今回は簡単なaタグを押した際にイベント情報を計測する方法を下記に記載します。

<a href="http://example.com" >test</a>

たとえば上記リンクタグをクリックした際にイベント情報を設定する例、

<a onclick="_gaq.push(['_trackEvent','カテゴリ','アクション','ラベル',100]);" href="http://example.com" >test</a>

上記のようにonclickを設定してあげるだけ。
細かい設定情報は、Google先生のこちらをご参照!

CSSで最初の一文字目を指定する方法

最近なってはじめて知ったのですが、
よく記事などで、一文字目が大きくしているサイトがあるのですが、
いままでPHPなどスクリプトでイジッテいるのかとおもってましたが、実はCSSだけでできた事に最近気づきました。

イトル・・・

上記のようにしたい場合。

.title:first-letter{
	font-size:20px;
	background-color:#eeeeee;
}

:first-letterと追記すれば一文字目だけのCSSを指定することができます。
上記例では、class=”title” の一文字目を背景グレーのフォントサイズ20pxにしています。

プライベートネットワーク環境変更時の注意点メモ(freebsd)

ネットワーク環境が変更なる際に注意しておきたいところメモ!

192.168.*.*など内部ネットワーク変更時に、IPは変更ないからそのままと思っているを危ない目に!IPの紐付けにもMACアドレスを利用していて、ARPを意識する必要がある。

http://e-words.jp/w/ARP.html

とくにFreeBSDなど、OSによってルータなどのMACアドレスが変わると、
うまく疎通ができなくなる現象があるので、注意が必要!

php 可変変数 変数名を変数で作るメモ

PHPでたまに変数名を動的に扱い場合があるのが、
よく忘れるのでメモ!

$hoge = 'foo'; //今回表示する変数を作成
$a = 'ge';     //変数名の一部を作るための変数
echo ${'ho'.$a}; //hoという文字列に$aの内容で変数名を指定し、echo