2011-10-25 13 views
5

私はAndroidのアプリでWebViewを使用しており、そこから多くのJavaScriptがサーバーから呼び出されています。私は、サーバーからの信号が目覚めてアプリケーションを再起動し、ユーザーに警告するために前面に持ってくるシステムを実装したいと考えています。私はこれがひどく不快であるが、私の場合は必要であることを知っている。サービス内のAndroid webview?

これを達成する唯一の方法は、WebViewをサービスに常駐させることです(いつでもアクティビティがOSによって強制終了される可能性があるため)。誰でもこれがどのように機能するか知っていますか?私は、WebViewsはアクティビティ内にしか存在しないことを読んだ。

ありがとうございます!

答えて

4

WebViewは、UIコンポーネントであるため、アクティビティはアクティビティ内にのみ存在できます。この問題を解決する最善の方法は、javascriptがサービス自体に行っている通信をオフロードすることです。これは単にアンドロイドの仕組みです。唯一の他の解決策は、あなたのjavascript/serverコミュニケーションをフォールトトレラントにして、いつでも接続が失われても耐えられるようにすることです。これを行う方法については、RESTモデルを参照してください。アンドロイドでRESTを使用することについてもっと詳しく知りたい場合は、video from Google IOをお勧めします。今日まで、私のお気に入りの一つです。

アクティビティを開始するためにサーバーから信号を送信する限り、これはある程度可能性があります。あなたは、デバイスを聞いている何かを持っている必要があります、おそらくサービス。あなたはあなたのサービスに長時間の投票を行い、そのためにただ待って応答を待つことができます。サーバからの応答が得られたら、それは次に行うことができる

Context.startActivity(intent) 

ここで、インテントは開始するアクティビティを指定する明示的なインテントです。つまり、リソースが不足している場合でもサービスを停止することができます。その上、インターネット接続はいつでも失われる可能性があります(これらは携帯電話であり、人々はしばしばインターネット接続を持たない場所で携帯電話を利用します)。

結論として、デバイスは接続性に関して100%信頼できるとは考えられていません。最もスマートなことは、アプリケーションの仕様を変更してフォールトトレランスを強化することです。

音が鈍いかもしれませんが、「これをやってはいけません。これまでこれをやってはいけません。より建設的に、私はあなたが正しいことをするならば、あなたはあなたのものをバックグラウンドに押し込み、それを使ってユーザーを悩ますことはないと言いたいと思います。覚えておいて、KISS、それは軍隊のバンドだけではありません。それは美しい哲学です。それは単純な愚かなままにしておきます。あなたはこのvideoを見てみたいと思うかもしれませんが、それは私のお気に入りの一つです。それは役に立ちましたか?

+0

OK、それは意味があります。私のアプリを正面に持ってくる問題を少し解明できますか? – TomBomb

+0

私の返答を編集して、あなたの質問にさらに答えます。 –

+0

ありがとうKurtis、これは大きな助けです。私は、活動/サービスが常に生きていることに全面的に頼っていないように努力しています。 私は上記のようにアクティビティを開始していますが、私の問題は、インテントが開始された後、再度フォーカスを得るためにアプリが必要になることです。私がstartActivity()を呼び出すときにユーザーが別のアプリケーションにいる場合、アプリケーションはバックグラウンドのままです。何かご意見は? – TomBomb

1

TomBomb、私の前の答えを受け入れてくれてありがとうが、私はあなたのために何か他のものがあると思う。アクティビティをフォアグラウンドに強制するのではなく、Status Bar Notificationを使用して、サーバーから新しい何かが入ったことをユーザーに知らせてみませんか?