合計 昨日 今日

アバター
Dixq (管理人)
管理人
 
記事: 1554
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (570)
日記
- 12月 2017
ボーナスで自社製品を買う (2)
   2017年12月10日(日) 20:17
玉藤製と自宅製 (9)
   2017年12月03日(日) 22:01

+ 11月 2017
+ 10月 2017
+ 9月 2017
+ 8月 2017
+ 7月 2017
+ 6月 2017
+ 5月 2017
+ 4月 2017
+ 3月 2017
+ 2月 2017
+ 1月 2017
+ 12月 2016
+ 11月 2016
+ 10月 2016
+ 9月 2016
+ 8月 2016
+ 7月 2016
+ 6月 2016
+ 5月 2016
+ 4月 2016
+ 3月 2016
+ 2月 2016
+ 1月 2016
+ 12月 2015
+ 11月 2015
+ 10月 2015
+ 9月 2015
+ 8月 2015
+ 7月 2015
+ 6月 2015
+ 5月 2015
+ 4月 2015
+ 3月 2015
+ 2月 2015
+ 1月 2015
+ 12月 2014
+ 11月 2014
+ 10月 2014
+ 9月 2014
+ 8月 2014
+ 7月 2014
+ 6月 2014
+ 5月 2014
+ 4月 2014
+ 3月 2014
+ 2月 2014
+ 1月 2014
+ 12月 2013
+ 11月 2013
+ 10月 2013
+ 9月 2013
+ 8月 2013
+ 7月 2013
+ 6月 2013
+ 5月 2013
+ 4月 2013
+ 3月 2013
+ 2月 2013
+ 1月 2013
+ 12月 2012
+ 11月 2012
+ 10月 2012
+ 9月 2012
+ 8月 2012
+ 7月 2012
+ 6月 2012
+ 5月 2012
+ 4月 2012
+ 3月 2012
+ 2月 2012
+ 1月 2012
+ 12月 2011
+ 11月 2011
+ 10月 2011
+ 9月 2011
+ 8月 2011
+ 7月 2011
+ 6月 2011
+ 5月 2011
+ 4月 2011
+ 3月 2011
+ 2月 2011
+ 1月 2011
+ 12月 2010
+ 11月 2010
+ 10月 2010
フォロー
カテゴリー
日常
1 記事

Android用ブラウザ制作

パーマリンクby Dixq (管理人) on 2012年1月03日(火) 23:26

JAVAとAndroidを学び始めて2ヶ月あまり。
冬休みの13日間でブラウザを作ってAndroidの知識を深めようと奮闘中です。
現在一応一通り使えるブラウザができました。
α版ですが,インストールしてみたい物好きな方はどうぞ!

[アプリ]
http://dixq.sakura.ne.jp/Android/bin/12 ... rowser.apk
(マーケット以外からアプリをインストールするときは, 設定 > アプリケーション > 不明な提供元 にチェックを入れると可能になります)

[ソースコード]
http://dixq.sakura.ne.jp/Android/src/12.01.03.zip

ソースコードは試行錯誤の末のコードで,はっきり言ってぐっちゃぐちゃなので,参考にしないで下さい(^^;

簡単にアプリの説明をすると・・・

普通にブラウザとして使えます。
デフォルトではgoogleのトップページがホームになっています。

画像

「★」ボタンを押すか,画面右端から左へスライドするジェスチャでブックマークが開きます。

画像

ブックマークの一番上をタップすると,現在のページが登録されます。
タップするとウェブ画面がキャプチャされ,サムネイルとなります。

画像

URL表示欄はURL入力欄兼,検索バーです。

戻るボタンはOS標準の戻るボタン,メニューボタンでホームの設定などが出来ます。

まだ不具合沢山あるのでご了承ください・・w
ただ,パーミッションがinternetしかないので,バグのせいで何かの大事なデータを消すなんてことは無いです。
最後に編集したユーザー Dixq (管理人) [ 2012年1月04日(水) 00:01 ], 累計 2 回

コメント数: 7 閲覧数: 30761
コメント

Re: Android用ブラウザ制作

パーマリンクby tana on 2012年1月03日(火) 23:38

使ってみましたが、ユニークですねw
今後の改良に期待してます
アバター
tana
 
記事: 33
登録日時: 2010年10月12日(火) 22:12
日記: 日記を見る (17)

Re: Android用ブラウザ制作

パーマリンクby Dixq (管理人) on 2012年1月03日(火) 23:48

>tanaさん

おぉ,ありがとうございます!
まだタブが無かったり・・沢山必要なものはありますね^^;
アバター
Dixq (管理人)
管理人
 
記事: 1554
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (570)

Re: Android用ブラウザ制作

パーマリンクby 沖 滉均 on 2012年1月04日(水) 01:59

冬休みが13日間っていうのがまず…
まぁ、それはさておきAndroid携帯持ってないから試せないや(;´Д`)
There is no royal road to learning.
[code]タグで指定できる言語
沖の雑記帳
アバター
沖 滉均
 
記事: 234
登録日時: 2010年11月15日(月) 11:15
お住まい: 神奈川県藤沢市
日記: 日記を見る (182)

Re: Android用ブラウザ制作

パーマリンクby bitter_fox on 2012年1月04日(水) 08:42

幾つか気になったことを・・・

コード[Java]: 全て選択
1
2
3
4
5
6
public class Def { 
    public final static String TAG = new String("Qrowser");
    public final static String INTENT_TAG = new String("SELECTED_ITEM");
    public final static String sINTENT_EXTRA_TITLE = new String("ExTitle");
    public final static String sINTENT_EXTRA_URL   = new String("ExUrl");
}

new String("...")は単に"..."でよくないですか?
http://www.ne.jp/asahi/hishidama/home/t ... tml#String

BookMarkBindDataのコンストラクタは次のように書いた方が美しいかと
コード[Java]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class BookMarkBindData {
    public String mTitle;
    public String mUrl;
    public Bitmap mBmp;
 
    public BookMarkBindData() {
        this(null, null, null); // フィールドは初期値(オブジェクト型ならnull)で初期化されるのでこの行は無くても良い
    }
 
    public BookMarkBindData(String title, String url) {
        this(title, url, null);
    }
 
    public BookMarkBindData(String title, String url, Bitmap bmp) {
        mTitle = title;
        mUrl = url;
        mBmp = bmp;
    }
}

http://www.ne.jp/asahi/hishidama/home/t ... ault_value

自分ならこう書きます。[追記]
コード[Java]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class BookMarkBindData {
    public String title;
    public String url;
    public Bitmap bmp;
 
    public BookMarkBindData() {
        this(null, null, null); // フィールドは初期値(オブジェクト型ならnull)で初期化されるのでこの行は無くても良い
    }
 
    public BookMarkBindData(String title, String url) {
        this(title, url, null);
    }
 
    public BookMarkBindData(String title, String url, Bitmap bmp) {
        this.title = title;
        this.url = url;
        this.bmp = bmp;
    }
}


コード[Java]: 全て選択
1
2
3
public class Share {
    public static Activity mActivity = null;
}

なんか、グローバルで怖いです・・・

コード[Java]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public void finalize(){ //デストラクタ
        if( mBmp != null ){
//          mBmp.recycle(); //ここでrecycleすると落ちる!しかししないとメモリリークする・・
        }
    }
 
    protected void finalize() {
        //ここでメモリリークが起きる
        // これ以外にセットしたBmpを解放する方法が無いか?
/*  //これでも落ちる
        imageView.setImageDrawable(null);
        if (ImageViewBmp != null) {
            Log.d(Def.TAG, "ImageViewBmp.recycle()");
            ImageViewBmp.recycle();
        }
*/
    }


android developers さんが書きました:public void recycle ()
Since: API Level 1

Free the native object associated with this bitmap, and clear the reference to the pixel data. This will not free the pixel data synchronously; it simply allows it to be garbage collected if there are no other references. The bitmap is marked as "dead", meaning it will throw an exception if getPixels() or setPixels() is called, and will draw nothing. This operation cannot be reversed, so it should only be called if you are sure there are no further uses for the bitmap. This is an advanced call, and normally need not be called, since the normal GC process will free up this memory when there are no more references to this bitmap.


このビットマップに関連付けされたネイティブなオブジェクトを解放して、ピクセルデータへの参照を取り除きます。
これは同調してピクセルデータを解放することは無いでしょう。単に他に参照が無かった時にGCが起きることを許可します。
もしgetPixels()やsetPixels()が呼ばれたりすると例外を投げて、何も描画せずに、ビットマップが「死んでいる」ことを目立たせます。
このオペレーションを取り消すことはできません、なのでビットマップの用途がこれ以上ないと確信できる時だけこのメソッドを呼ぶべきです。
これは高度な呼び出しで、普通はこのビットマップへの参照が無くなるとGCがこのメモリを解放するので、通常は呼ばれる必要がありません。

落ちるのはmBmpやImageViewBmpが指すオブジェクトがまだ残っていてそれが実際に描画されているせいじゃないでしょうか。
どれぐらいのメモリリークが起きているのかが分からないのでアレですが、GCが回収するようになるまでほっといたらどうでしょう?

あと命名規則が・・・そのJavaじゃないですw
最後に編集したユーザー bitter_fox [ 2012年1月04日(水) 11:48 ], 累計 1 回
アバター
bitter_fox
 
記事: 607
登録日時: 2010年11月25日(木) 20:25
お住まい: 大阪府
日記: 日記を見る (8)

Re: Android用ブラウザ制作

パーマリンクby Dixq (管理人) on 2012年1月04日(水) 11:23

>沖さん

今年は休みがいい感じに並んでるので,1/5,6有給取るだけでそうなるのですよb

Androidは最近1万位のもあるし,興味があれば是非w
アバター
Dixq (管理人)
管理人
 
記事: 1554
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (570)

Re: Android用ブラウザ制作

パーマリンクby Dixq (管理人) on 2012年1月04日(水) 11:50

>狐先生

先生にこんなに詳しく見て頂けるとは/(^o^)\
JAVAについては動けばいいやな感じなので,まともに学んでません・・w
命名規則もなんでこんなに揺れてるの?!って感じなので,次回はjavaのスタイルに統一します!

> なんか、グローバルで怖いです・・・

えぇ,それは不適切ですよね・・w
ただ,Toastなどどこのクラスからでも使用したいメソッドなのに,アクティブなアクティビティのインスタンスが無いと使用できないものもあり,とりあえずこんな感じになってました。
でも調べてみたら,アクティブなアクティビティのContextを取得するAPIがあったので,これは必要ないですね。

> new String("...")は単に"..."でよくないですか?

素晴らしい。いつもめんどくさいな~と思ってましたw

> 落ちるのはmBmpやImageViewBmpが指すオブジェクトがまだ残っていてそれが実際に描画されているせいじゃないでしょうか。
> どれぐらいのメモリリークが起きているのかが分からないのでアレですが、GCが回収するようになるまでほっといたらどうでしょう?

そうなんですよね。
ただ,自動セットされたBmpはほっといても解放されるけど,Bitmap.createBitmapで作ったビットマップは自分でrecycleする必要があると思ってました。
違うのかな・・"out of memory"が表示されたのでそうかと思ってましたがよく確認しておきます。

> BookMarkBindDataのコンストラクタは次のように書いた方が美しいかと

こう書くと,後から変数追加した時に全部に引数を追加する必要があって面倒ってことはないです?
アバター
Dixq (管理人)
管理人
 
記事: 1554
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (570)

Re: Android用ブラウザ制作

パーマリンクby bitter_fox on 2012年1月04日(水) 19:07

Dixq (管理人) さんが書きました:ただ,自動セットされたBmpはほっといても解放されるけど,Bitmap.createBitmapで作ったビットマップは自分でrecycleする必要があると思ってました。
違うのかな・・"out of memory"が表示されたのでそうかと思ってましたがよく確認しておきます。


一回recycleを呼んで例外を出しておいて、原因を突き止めたほうがよさそうですね。
Dixq (管理人) さんが書きました:> BookMarkBindDataのコンストラクタは次のように書いた方が美しいかと

こう書くと,後から変数追加した時に全部に引数を追加する必要があって面倒ってことはないです?


確かに引数を追加していく必要がありますけど、処理を変更する必要があるときと比べたら労力は少ないと思います。
initとか言うメソッドを一つだけ作っておいてそこにまとめればもし引数を追加し忘れていてもコンパイルエラーになってくれますし。(処理の変更漏れはコンパイルじゃ分からないですよね)

Offtopic :
同じ値を設定するんだったら実は一か所だけ変更すれば済むけど、複雑になるからあんまり・・・
コード[Java]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class BookMarkBindData {
    public String title;
    public String url;
    public Bitmap bmp;
    public Object obj;
 
    public BookMarkBindData() {
        this(null, null, null); // フィールドは初期値(オブジェクト型ならnull)で初期化されるのでこの行は無くても良い
    }
 
    public BookMarkBindData(String title, String url) {
        this(title, url, null);
    }
 
    public BookMarkBindData(String title, String url Bitmap bmp)
    {
        this(title, url, null, null);
    }
 
    public BookMarkBindData(String title, String url, Bitmap bmp, Object obj) {
        this.title = title;
        this.url = url;
        this.bmp = bmp;
        this.obj = obj;
    }
}
アバター
bitter_fox
 
記事: 607
登録日時: 2010年11月25日(木) 20:25
お住まい: 大阪府
日記: 日記を見る (8)

オンラインデータ

登録ユーザー: なし