1

私はこれを得ることができません。うまく機能していたアプリがありました。その後、Razr Droid を ICS に更新したところ、状況が変わりました。

Drupal サービス モジュールを使用して Drupal サーバーを実行する。Wi-Fi 経由で接続すると、すべてがうまく機能します。ただし、3g/4g 経由で接続すると、httpclient.execute() メソッドは数秒ではなく 3 ~ 4 分かかります。問題を再現する次のサンプルコードをまとめました。4g を介したサーバーへのブラウザ接続が正常に機能することを追加する必要があります。したがって、これは単純なワイヤレス接続の問題ではないと思います。

public class DrupalTestActivity extends Activity {


    private Context mCtx;
public static long mSESSION_LIFETIME = 200000; // seconds.
final static String URL =   "www.myDrupalServer.com";
final static String ENDPOINT = "rest/";
String mResponse = null;
String cookie;
TextView textView;

public class DoLogin extends AsyncTask<Void, Void, String> {

    @Override
    protected String doInBackground(Void... params) {
        cookie = getCookie(mCtx);
        return cookie;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        textView.setText(mResponse);
    }



}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.mCtx = this;
    setContentView(R.layout.main);
    textView = (TextView) findViewById(R.id.textView);
    DoLogin task = new DoLogin();
    task.execute();
}


protected String getCookie(Context ctx) {
    SharedPreferences settings = PreferenceManager
            .getDefaultSharedPreferences(mCtx);
    Long timestamp = settings.getLong("sessionid_timestamp", 0);
    Long currenttime = new Date().getTime() / 100;
    String cookie = settings.getString("cookie", null);
    if (cookie == null || (currenttime - timestamp) >= mSESSION_LIFETIME) {
        JSONObject mUserAccount = UserAccount.getJSONUserAccount(ctx);
        userLogin(mUserAccount);
        return getCookie(ctx);
    } else {
        Log.d("COOKIE", cookie);
        return cookie;
    }
}


public String userLogin(JSONObject mUserAccount) {
    String uri = URL + ENDPOINT + "user/login";
    HttpPost httppost = new HttpPost(uri);
    httppost.setHeader("Content-type", "application/json");
    StringEntity se;
    try {
        HttpClient mHttpClient = new DefaultHttpClient();
        HttpParams mHttpParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(mHttpParams, 10000);
        HttpConnectionParams.setSoTimeout(mHttpParams, 10000);

        se = new StringEntity(mUserAccount.toString());
        se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
                "application/json"));
        httppost.setEntity(se);
                    Log.d("STATUS", "CALLING DRUPAL");
        HttpResponse response = mHttpClient.execute(httppost);
                    Log.d("STATUS", "LOGIN COMPLETE");
        mResponse = EntityUtils.toString(response.getEntity());
        // save the sessid and session_name
        JSONObject obj = new JSONObject(mResponse);
        SharedPreferences settings = PreferenceManager
                .getDefaultSharedPreferences(mCtx);
        SharedPreferences.Editor editor = settings.edit();
        editor.putString("cookie", obj.getString("session_name") + "="
                + obj.getString("sessid"));
        editor.putLong("sessionid_timestamp",
                new Date().getTime() / 100);
        editor.commit();
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return mResponse;
    }
}

ここに UserAccount クラスがありますが、実際には関係ないと思います..

public class UserAccount {

    private String USER = "tester";
    private String PASSWORD = "passtest";
    private static Context mCtx;

    public UserAccount(Context Ctx, String Username, String Password) {
        mCtx = Ctx;
    }

    public void save(Context mCtx) {
        // TODO This would really work better if we just passed in the Account
        // Object
        Map<String, String> mMap = new HashMap<String, String>();
        mMap.put("username", USER);
        mMap.put("password", PASSWORD);
        SharedPreferences settings = PreferenceManager
                .getDefaultSharedPreferences(mCtx);
        SharedPreferences.Editor editor = settings.edit();
        Iterator<?> iter = mMap.entrySet().iterator();
        while (iter.hasNext()) {
            @SuppressWarnings("rawtypes")
            Map.Entry mEntry = (Map.Entry) iter.next();
            editor.putString(mEntry.getKey().toString(), mEntry.getValue()
                    .toString());
        }
        editor.commit();
    }



    public static JSONObject getJSONUserAccount(Context ctx) {
        SharedPreferences accountSettings = PreferenceManager
                .getDefaultSharedPreferences(ctx);
        String nUsername = accountSettings.getString("username", "tester");
        String nPassword = accountSettings.getString("password", "dweeber");
        JSONObject JSONUser = new JSONObject();
        try {
            JSONUser.put("password", nPassword);
            JSONUser.put("username", nUsername);
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return JSONUser;
    }

}

Wi-Fi 接続の LogCat 出力。

07-02 16:49:32.812: I/System.out(12001): debugger has settled (1401)
07-02 16:49:33.319: D/dalvikvm(12001): threadid=1: still suspended after undo (sc=1 dc=1)
07-02 16:49:36.921: D/STATUS(12001): CALLING DRUPAL
07-02 16:49:37.749: D/libc(12001): Forward DNS query to netd(h=www.seinetest.com.php5-22.dfw1-1.websitetestlink.com s=^)
07-02 16:49:43.046: D/STATUS(12001): LOGIN COMPLETE

時間は十数秒かそこら..

3g/4g での LogCat 出力

07-02 16:52:36.171: I/System.out(12759): debugger has settled (1362)
07-02 16:52:36.687: D/dalvikvm(12759): threadid=1: still suspended after undo (sc=1 dc=1)
07-02 16:52:46.171: D/STATUS(12759): CALLING DRUPAL
07-02 16:52:47.265: D/libc(12759): Forward DNS query to netd(h=www.seinetest.com.php5-22.dfw1-1.websitetestlink.com s=^)
07-02 16:53:17.569: W/IInputConnectionWrapper(12759): getExtractedText on inactive InputConnection
07-02 16:53:17.593: W/IInputConnectionWrapper(12759): getExtractedText on inactive InputConnection
07-02 16:54:38.593: W/IInputConnectionWrapper(12759): getExtractedText on inactive InputConnection
07-02 16:54:38.616: W/IInputConnectionWrapper(12759): getExtractedText on inactive InputConnection
07-02 16:56:08.921: D/STATUS(12759): LOGIN COMPLETE

ログイン時間大幅延長!!

明らかに、getExtractedText は何か新しいものですが、それは原因ですか、それとも結果ですか? ここで IInputConnectionWrapper getExtractedText を検索しましたが、その重要性を誰かが尋ねる質問が 1 つあります。これはクローズされ、悪い質問としてマークされました。:(

追加の詳細は、Verizon キャリア サーバーが Rackspace Cloud Servers Phone Verizon Droid Razr、Android 4.0.4 でホストされていることです。

ここで何らかのガイダンスが得られることを本当に望んでいます。助けてくれてありがとう。

4

2 に答える 2

2

私はついにこれを理解したと思います。私はいくつかの調査といくつかのテストを行いました。
Phone Droid Razr、ICS 4.0.4 Verizone ワイヤレス。

3 つのサーバーと Google をポーリングしました。テスト サーバーはすべて同じクラウド (RackSpace) に配置されています。応答時間は次のとおりです。Google: 42ms My Server #1 100ms My Server #2 96 My Server #3 - www.seinetest.blah.blah.websitetestlink.com として実行されている、ドメイン名が登録されていないテスト サーバー。Rackspace は、ドメイン名がサーバーに登録されるまで、これを自動的に行います。応答時間 14445 ミリ秒。

4 つのサイトすべてに対するデスクトップ ブラウザの時間は、目立ったものではありませんでした。それで、問題は電話にあるはずでした..またはそうしましたか?

ICS へのアップグレード後、この応答時間の大きな不一致が発生しました。上記のリンクで、他の電話がプロキシを通過する ICS に問題があるというデータを見つけました。Rackspace に電話したところ、登録済みのドメイン ネーム サーバーとサーバー #3 の唯一の違いは、DNS ポインターが指している場所であると断言されました.. プロキシはありません!

他に試すことはほとんどなく、ドメイン名と WALLAH! を使用してサーバー #3 を登録しました。ICS 電話からの応答時間は、ドメイン名が登録されている他のサーバーと同じです..これがすべて ICS のアップグレードで発生したことを考えると、これは私が報告する ICS のバグであると考える傾向があります。

于 2012-07-06T18:03:41.567 に答える
0

コードを変更しておらず、これがGingerbreadからのアップグレード後に発生した場合は、ICS以外のデバイスでのテストを検討することをお勧めします。Ice Cream Sandwichが「効率的なネットワーク使用」機能を追加して以来、wifi / 3G/4Gを介した接続の問題が非常にランダムに発生しています。これらのタイプの問題の多くは、Google Code(http://code.google.com/p/android/issues/list?can=2&q=3g+ics&colspec=ID+Type+Status+Owner+Summary+ )で確認できます。 Stars&cells = tiles)ともう少し接線があります:http://androidcommunity.com/signal-issues-arrive-after-android-4-0-4-ice-cream-sandwich-update-20120405/ とにかく、非常に奇妙です、しかし、無関係のデバイスがICSにジャンプするときに見た問題を彷彿とさせます。

于 2012-07-05T19:42:11.590 に答える