Android警报在单独的进程中不会触发

时间:2013-04-21 15:06:56

标签: android multithreading alarm

以下代码来自我的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的数据。我正在遇到问题,当安卓进入睡眠模式时,它不可靠地接收HTML返回数据。

1 个答案:

答案 0 :(得分:1)

  

我缺少什么?

由于单独处理通常是一个坏主意,只需关闭android:process

  

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

我不知道你认为什么是“异步wget”。我将假设您确实意味着您正在使用您的应用程序打包ARM编译的wget二进制文件,这非常奇怪。

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

使用HttpUrlConnectionHttpClient来处理来自WakefulIntentService的您的HTTP请求(“async wget”),或处理IntentService的{​​{1}}围绕使用WakeLock警报的问题。 _WAKEUP为您提供了一个后台线程(执行长时间运行所必需的),并且在不再需要时会自动关闭(必要时用户不会因为任务杀手攻击你而伤害他们的设备)。

  

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

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

  

设定时间

如果您使用HttpClientHttpUrlConnection来执行HTTP请求,则可以指定请求超时期限。

相关问题