質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

3回答

3579閲覧

アプリ再起動時のMilkcocoaがやたら遅い

退会済みユーザー

退会済みユーザー

総合スコア0

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2015/09/04 04:33

以下のようなヘルパークラスを作成し、利用しています。

java

1@SuppressWarnings("unused") 2public class MilkcocoaHelper implements DataStoreEventListener, SystemEventListener { 3 public static final String EVENT_PUSH = "push"; 4 public static final String EVENT_SET = "set"; 5 public static final String EVENT_SEND = "send"; 6 public static final String EVENT_REMOVE = "remove"; 7 8 private static final String APP_ID = "app_id"; 9 10 private MilkCocoa milkcocoa; 11 private DataStore dataStore; 12 private String dataStoreName; 13 14 private boolean isConnectionLost; 15 16 /** 17 * コンストラクタ 18 * 19 * @param dataStoreName データストア名 20 */ 21 public MilkcocoaHelper(String dataStoreName) { 22 this.dataStoreName = dataStoreName; 23 createMilkcocoa(); 24 } 25 26 /** 27 * Milkcocoa の生成 28 */ 29 private void createMilkcocoa() { 30 isConnectionLost = false; 31 32 milkcocoa = new MilkCocoa(APP_ID + ".mlkcca.com"); 33 milkcocoa.setSystemEventListener(this); 34 35 dataStore = milkcocoa.dataStore(dataStoreName); 36 dataStore.addDataStoreEventListener(this); 37 dataStore.on(EVENT_PUSH); 38 dataStore.on(EVENT_SET); 39 dataStore.on(EVENT_SEND); 40 dataStore.on(EVENT_REMOVE); 41 } 42 43 @Override 44 public void onConnectionLost() { 45 isConnectionLost = true; 46 } 47 48 @Override 49 public void onPushed(DataElement dataElement) { 50 51 } 52 53 @Override 54 public void onSetted(DataElement dataElement) { 55 56 } 57 58 @Override 59 public void onSended(DataElement dataElement) { 60 61 } 62 63 @Override 64 public void onRemoved(DataElement dataElement) { 65 66 } 67 68 /** 69 * データストアへプッシュ 70 * 71 * @param data データ 72 */ 73 public void push(DataElementValue data) { 74 if (isConnectionLost) { 75 createMilkcocoa(); 76 } 77 78 dataStore.push(data); 79 } 80}

普通に動かす分には問題ないのですが、
アプリを強制終了し、ランチャーから起動し直したとき、
Milkcocoaオブジェクトの生成もDataStoreオブジェクトの取得もやたらと時間がかかります。

使い方が悪いのかなにか対処法があるのか、ご教示頂けますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akitaika_

2015/09/04 04:43 編集

補足します。 > アプリを強制終了し、ランチャーから起動し直したとき、 手順は、以下の通りです。 アプリ起動→タスクキー押下→アプリ終了→ランチャーでアプリのアイコンをタッチ > Milkcocoaオブジェクトの生成もDataStoreオブジェクトの取得もやたらと時間がかかります。 どちらも3秒ほどかかります。
guest

回答3

0

詳細なご報告ありがとうございます。

接続が残り続ける件についてですが、現在プロセスが死ぬまでは接続が残る仕様になっております。

本日、明示的にDisconnectするためのAPIを追加いたしました。

java

1milkcocoa.disconnect();

http://cdn.mlkcca.com/java/milkcocoa-dev.jar より再ダウンロードをお願いいたします。

Host is unresolvedのエラーが出だした件ですが。
こちらでも再現できるようにしてみようと思っています。

完全な回答になっていないかもしれませんが、ひとまず回答いたします。

投稿2015/09/05 00:15

ShuheiHiya

総合スコア110

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

すごく長くなったので、別回答で書きます。
最新のSDKでビルドできるようになったので、いろいろ試したところ気になることがありました。

まず、元のMilkcocoaHelperを一部変更して、実行時間を取れるようにしました。

java

1 /** 2 * Milkcocoa の生成 3 */ 4 private void createMilkcocoa() { 5 isConnectionLost = false; 6 7 Date startTime1 = new Date(); 8 9 milkcocoa = new MilkCocoa(APP_ID + ".mlkcca.com"); 10 milkcocoa.setSystemEventListener(this); 11 12 Date endTime1 = new Date(); 13 Log.d("MilkcocoaHelper", "create milkcocoa = " + String.valueOf(endTime1.getTime() - startTime1.getTime())); 14 15 Date startTime2 = new Date(); 16 17 dataStore = milkcocoa.dataStore(dataStoreName); 18 19 Date endTime2 = new Date(); 20 Log.d("MilkcocoaHelper", "create dataStore = " + String.valueOf(endTime2.getTime() - startTime2.getTime())); 21 22 dataStore.addDataStoreEventListener(this); 23 dataStore.on(EVENT_PUSH); 24 dataStore.on(EVENT_SET); 25 dataStore.on(EVENT_SEND); 26 dataStore.on(EVENT_REMOVE); 27 }

以下、アプリのログとadb shell netstatを実行した結果を貼り付けます。

一旦、機内モード

shell@hammerhead:/ $ netstat Proto Recv-Q Send-Q Local Address Foreign Address State tcp6 0 32 ::ffff:153.154.165.135:42192 ::ffff:74.125.203.188:5228 FIN_WAIT1 tcp6 0 0 ::ffff:153.248.193.105:50883 ::ffff:173.194.117.197:80 ESTABLISHED tcp6 0 0 ::ffff:153.248.193.105:39692 ::ffff:173.194.126.229:80 ESTABLISHED

Milkcocoa 利用開始

09-04 15:12:14.549 28325-28325/com.example.locationsample D/MilkcocoaHelper﹕ create milkcocoa = 4035 09-04 15:12:14.558 28325-28325/com.example.locationsample D/MilkcocoaHelper﹕ create dataStore = 8

Milkcocoa 利用停止

shell@hammerhead:/ $ netstat Proto Recv-Q Send-Q Local Address Foreign Address State tcp6 0 0 ::ffff:153.248.193.105:33811 ::ffff:27.133.134.20:8883 ESTABLISHED tcp6 0 32 ::ffff:153.154.165.135:42192 ::ffff:74.125.203.188:5228 FIN_WAIT1 tcp6 0 0 ::ffff:153.248.193.105:50883 ::ffff:173.194.117.197:80 ESTABLISHED tcp6 0 0 ::ffff:153.248.193.105:41935 ::ffff:27.133.134.20:443 ESTABLISHED tcp6 0 0 ::ffff:153.248.193.105:39692 ::ffff:173.194.126.229:80 ESTABLISHED

アプリは殺さず、Milkcocoa 利用開始

09-04 15:12:55.829 28325-28325/com.example.locationsample D/MilkcocoaHelper﹕ create milkcocoa = 24864 09-04 15:12:55.836 28325-28325/com.example.locationsample D/MilkcocoaHelper﹕ create dataStore = 6

Milkcocoa 利用停止

shell@hammerhead:/ $ netstat Proto Recv-Q Send-Q Local Address Foreign Address State tcp6 0 0 ::ffff:153.248.193.105:33811 ::ffff:27.133.134.20:8883 ESTABLISHED ←残ってる tcp6 0 219 ::ffff:153.248.193.105:49359 ::ffff:27.133.134.20:8883 ESTABLISHED ←新しくできてる tcp6 0 32 ::ffff:153.154.165.135:42192 ::ffff:74.125.203.188:5228 FIN_WAIT1 ←残ってる? tcp6 0 0 ::ffff:153.248.193.105:45035 ::ffff:64.233.187.188:5228 ESTABLISHED ←新しくできた? tcp6 0 0 ::ffff:153.248.193.105:50883 ::ffff:173.194.117.197:80 ESTABLISHED tcp6 0 0 ::ffff:153.248.193.105:41935 ::ffff:27.133.134.20:443 ESTABLISHED tcp6 0 0 ::ffff:153.248.193.105:39692 ::ffff:173.194.126.229:80 ESTABLISHED

アプリは殺さず、もう一度 Milkcocoa 利用開始しようとしたら…
(※は、AppIDです)

09-04 15:10:22.536 27292-27292/? I/art﹕ Late-enabling -Xcheck:jni 09-04 15:10:22.625 27292-27292/com.example.locationsample D/LocationManagerService﹕ Location Manager service is created. 09-04 15:10:22.631 27292-27292/com.example.locationsample I/System.out﹕ jv2f9dazpy6 09-04 15:10:22.766 27292-27292/com.example.locationsample W/System.err﹕ MqttException (0) - java.net.UnknownHostException: Host is unresolved: ※.mlkcca.com 09-04 15:10:22.766 27292-27292/com.example.locationsample W/System.err﹕ at org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:38) 09-04 15:10:22.766 27292-27292/com.example.locationsample W/System.err﹕ at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:604) 09-04 15:10:22.766 27292-27292/com.example.locationsample W/System.err﹕ at java.lang.Thread.run(Thread.java:818) 09-04 15:10:22.766 27292-27292/com.example.locationsample W/System.err﹕ Caused by: java.net.UnknownHostException: Host is unresolved: ※.mlkcca.com 09-04 15:10:22.766 27292-27292/com.example.locationsample W/System.err﹕ at java.net.Socket.connect(Socket.java:865) 09-04 15:10:22.766 27292-27292/com.example.locationsample W/System.err﹕ at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:70) 09-04 15:10:22.767 27292-27292/? W/System.err﹕ at org.eclipse.paho.client.mqttv3.internal.SSLNetworkModule.start(SSLNetworkModule.java:82) 09-04 15:10:22.767 27292-27292/? W/System.err﹕ at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:590) 09-04 15:10:22.767 27292-27292/? W/System.err﹕ ... 1 more 09-04 15:10:22.767 27292-27292/? I/System.out﹕ Unable to set up client: MqttException (0) - java.net.UnknownHostException: Host is unresolved: ※.mlkcca.com 09-04 15:10:22.768 27292-27292/? I/art﹕ System.exit called, status: 1 09-04 15:10:22.768 27292-27292/? I/AndroidRuntime﹕ VM exiting with result code 1, cleanup skipped.

上の発生とともにネットワークが死んだ…(アプリも死んだ)
一度、アプリをアンインストールしてみる。

3G回線で復帰後

shell@hammerhead:/ $ netstat Proto Recv-Q Send-Q Local Address Foreign Address State tcp6 0 0 ::ffff:153.155.243.253:40754 ::ffff:216.58.220.202:443 ESTABLISHED tcp6 0 0 ::ffff:153.155.243.253:49961 ::ffff:54.230.87.84:80 TIME_WAIT tcp6 0 0 ::ffff:153.155.243.253:44209 ::ffff:173.194.72.188:5228 ESTABLISHED tcp6 0 0 ::ffff:153.155.243.253:39512 ::ffff:173.194.126.135:443 ESTABLISHED tcp6 0 0 ::ffff:153.155.243.253:53710 ::ffff:173.194.126.137:80 ESTABLISHED tcp6 0 0 ::ffff:153.155.243.253:47899 ::ffff:173.194.126.132:80 ESTABLISHED tcp6 0 0 ::ffff:153.155.243.253:43854 ::ffff:216.58.220.202:443 ESTABLISHED

アプリをインストールして、Milkcocoa 利用開始

09-04 15:23:04.682 5112-5112/com.example.locationsample D/MilkcocoaHelper﹕ create milkcocoa = 6124 09-04 15:23:04.687 5112-5112/com.example.locationsample D/MilkcocoaHelper﹕ create dataStore = 5

インストールし直しても重い…。

Milkcocoa 利用停止

shell@hammerhead:/ $ netstat Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 153.155.243.253:50664 216.58.221.10:443 TIME_WAIT tcp6 0 0 ::ffff:153.155.243.253:44133 ::ffff:173.194.126.135:443 ESTABLISHED tcp6 0 0 ::ffff:153.155.243.253:60937 ::ffff:27.133.134.20:8883 ESTABLISHED tcp6 0 0 ::ffff:153.155.243.253:40754 ::ffff:216.58.220.202:443 ESTABLISHED tcp6 0 0 ::ffff:153.155.243.253:44209 ::ffff:173.194.72.188:5228 ESTABLISHED tcp6 0 0 ::ffff:153.155.243.253:39512 ::ffff:173.194.126.135:443 ESTABLISHED tcp6 0 0 ::ffff:153.155.243.253:53710 ::ffff:173.194.126.137:80 ESTABLISHED tcp6 0 0 ::ffff:153.155.243.253:47899 ::ffff:173.194.126.132:80 ESTABLISHED tcp6 0 0 ::ffff:153.155.243.253:60769 ::ffff:27.133.134.20:443 ESTABLISHED tcp6 0 0 ::ffff:153.155.243.253:43854 ::ffff:216.58.220.202:443 ESTABLISHED

LTE復帰後、Milkcocoa 利用開始

09-04 15:25:53.579 6931-6931/com.example.locationsample D/MilkcocoaHelper﹕ create milkcocoa = 1145 09-04 15:25:53.579 6931-6931/com.example.locationsample D/MilkcocoaHelper﹕ create dataStore = 0

Milkcocoa 利用停止

shell@hammerhead:/ $ netstat Proto Recv-Q Send-Q Local Address Foreign Address State tcp6 0 0 ::ffff:153.155.243.253:44133 ::ffff:173.194.126.135:443 ESTABLISHED tcp6 1 0 ::ffff:153.155.243.253:40754 ::ffff:216.58.220.202:443 CLOSE_WAIT tcp6 0 0 ::ffff:153.155.243.253:55024 ::ffff:27.133.134.20:8883 ESTABLISHED tcp6 0 0 ::ffff:153.155.243.253:44209 ::ffff:173.194.72.188:5228 ESTABLISHED tcp6 1 0 ::ffff:153.155.243.253:39512 ::ffff:173.194.126.135:443 CLOSE_WAIT tcp6 1 0 ::ffff:153.155.243.253:53710 ::ffff:173.194.126.137:80 CLOSE_WAIT tcp6 0 0 ::ffff:153.155.243.253:42572 ::ffff:216.58.220.202:443 ESTABLISHED tcp6 0 0 ::ffff:153.155.243.253:42220 ::ffff:27.133.134.20:443 ESTABLISHED tcp6 0 0 ::ffff:153.155.243.253:47899 ::ffff:173.194.126.132:80 ESTABLISHED tcp6 1 0 ::ffff:153.155.243.253:43854 ::ffff:216.58.220.202:443 CLOSE_WAIT

タスクキー押下して、アプリを終了

shell@hammerhead:/ $ netstat Proto Recv-Q Send-Q Local Address Foreign Address State tcp6 0 0 ::ffff:153.155.243.253:44133 ::ffff:173.194.126.135:443 ESTABLISHED tcp6 1 0 ::ffff:153.155.243.253:40754 ::ffff:216.58.220.202:443 CLOSE_WAIT tcp6 0 0 ::ffff:153.155.243.253:44209 ::ffff:173.194.72.188:5228 ESTABLISHED tcp6 1 0 ::ffff:153.155.243.253:39512 ::ffff:173.194.126.135:443 CLOSE_WAIT tcp6 1 0 ::ffff:153.155.243.253:53710 ::ffff:173.194.126.137:80 CLOSE_WAIT tcp6 0 0 ::ffff:153.155.243.253:42572 ::ffff:216.58.220.202:443 ESTABLISHED tcp6 0 0 ::ffff:153.155.243.253:47899 ::ffff:173.194.126.132:80 ESTABLISHED tcp6 1 0 ::ffff:153.155.243.253:43854 ::ffff:216.58.220.202:443 CLOSE_WAIT

残ってたポート8883がいなくなる!

投稿2015/09/04 07:16

akitaika_

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akitaika_

2015/09/04 07:17

いろいろ切れてしまった…。 なんとなく無制限に接続が増えていってるような気がするのですが、 アプリ側から明示的に切断できるような仕組みってないでしょうか?
akitaika_

2015/09/04 07:18

前提とまとめが消えてる…不手際で申し訳ないです。 アプリでのMilkcocoa利用方法 ・位置情報を取得するサービスを作成し、位置情報を取得するたびに位置情報をデータストアにプッシュしている ・Milcocoaオブジェクトを生成するタイミングは、サービスのonCreateが呼ばれたときと  MilkcocoaのシステムイベントのonConnectionLostが呼ばれた後に、データをプッシュするとき 気になること ・Milkcocoaオブジェクトを生成するたびに、確率されたポート8883の接続が増えてく ・Milkcocoaを利用しているアプリが終了すると接続が消える  =アプリがプロセス的に死ぬまで、接続が残り続ける? ・Milkcocoaオブジェクトを生成後、アプリがプロセス的に死んでも、接続は生きてる? (また端末のネットワークが死ぬのが怖くて、試せてないですが…)
guest

0

Milkcocoaを開発している、部谷と申します。

ご利用ありがとうございます。ご迷惑をおかけして申し訳ございません。

Android SDKのバージョンなのですが、現在ベータということでバージョン番号を打っておりませんでした。
しかし8/26に、以下の問題に対処したバージョンをアップロードしております。

https://teratail.com/questions/15059#reply__list

最新SDK:http://cdn.mlkcca.com/java/milkcocoa-dev.jar

ご利用のSDKは8/26以降にダウンロードしたものでしょうか?

もしかしたら、push,set,remove,sendすべてにonメソッドを監視しているために、重くなっているのかも入れません。具体的にどの部分にどのくらい時間がかかっているかお分かりになりますでしょうか?

投稿2015/09/04 05:14

ShuheiHiya

総合スコア110

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akitaika_

2015/09/04 05:33

コメントありがとうございます。 > ご利用のSDKは8/26以降にダウンロードしたものでしょうか? いいえ、違います。 いただいた最新SDKの方は今試そうとしましたが、私の環境ではビルドできなかったので、一旦別問題とさせてください。すみません。 > もしかしたら、push,set,remove,sendすべてにonメソッドを監視しているために、重くなっているのかも入れません。具体的にどの部分にどのくらい時間がかかっているかお分かりになりますでしょうか? 補足の方に書いたので、見づらくなってしまって申し訳ないのですが、「new MilkCocoa(~)」の部分と「milkcocoa.dataStore(~)」で時間がかかっています。3gのときは、どちらも3秒、lteのときはmilkcocoaの方が1秒、dataStoreの方が0.5秒ほどです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問