0

以下代码来自我的 MANIFEST.XML 文件

以下工作:
<receiver android:name="com.PageP.Alarm>
但是,当我添加进程时它不会触发:
<receiver android:process=":remote" android:name="com.PageP.Alarm>

我有一个断点: public void onReceive(Context context, Intent intent)

如果没有远程进程,它可以工作,如果我添加远程进程,它就会停止工作。

我错过了什么???

好的,让我发布我的 ASYNC HTTPGET

package com.PageP;

import java.io.IOException;

import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;

import android.os.AsyncTask;

public class GrabURL extends AsyncTask<String, Void, Void> {
    private HttpClient Client = new DefaultHttpClient();
    private String content;
    private String Error = null;
    private String url = null;

    protected void onPreExecute() {
 //       Dialog.setMessage("Downloading source..");
 //       Dialog.show();
    }

    protected Void doInBackground(String... urls) {
        url = urls[0];
        try {
            HttpGet httpget = new HttpGet(urls[0]);
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            content = Client.execute(httpget, responseHandler);
        } catch (ClientProtocolException e) {
            Error = e.getMessage();
            cancel(true);
        } catch (IOException e) {
            Error = e.getMessage();
            cancel(true);
        }

        return null;
    }

    protected void onPostExecute(Void unused) {
      Login.GotURL(content, url);
      Client = null;
    }

}

然后我称之为

public static void Ping(String Args) {
 final GrabURL wget = new  GrabURL();
 String url = "";

 url = MyAuth("PING")+ Args;
 wget.execute(PPURL+url);
}

当我的警报触发时,我希望它保持清醒,以便在我解码返回的 HTML 的另一端接收数据。当 Android 进入睡眠模式时,我遇到了问题,它不能可靠地接收 HTML 返回的数据。

4

1 回答 1

1

我错过了什么?

由于拥有一个单独的流程通常是一个坏主意,因此请不android:process要这样做。

我需要它保持清醒足够长的时间调用异步 wget 并处理返回的 html。

我不知道您认为“异步 wget”是什么意思。我将假设您的字面意思是您正在将 ARM 编译的wget二进制文件与您的应用程序一起打包,这真是难以言喻。

此外,Android 将在几秒钟内终止您的进程,以占用该进程的主应用程序线程。因此,您将浪费 RAM、CPU 和电池而没有特别的优势。

使用HttpUrlConnectionHttpClient执行您的 HTTP 请求(“async wget”),来自WakefulIntentService或您自己的IntentService,处理与使用警报有关的WakeLock问题。为您提供一个后台线程(进行长时间运行的工作所必需的),并在不再需要时自动关闭(这是必要的,因此用户不会使用任务杀手攻击您以损害他们的设备)。_WAKEUPIntentService

我可以进入一个 do/loop 并在其中休眠,每 250 毫秒醒来一次以查看数据是否已进入

如果您使用HttpUrlConnectionHttpClient执行您的 HTTP 请求,您将通过这些 API 知道“数据是否已进入”。

有设定的超时时间

如果您使用HttpUrlConnectionHttpClient执行您的 HTTP 请求,您将能够指定请求超时期限。

于 2013-04-21T15:41:01.183 回答