Android:在OnReceive方法中启动异步任务
我目前有一个管理广播接收器的服务。此接收器可以关闭和打开 在收到SMS时触发OnReceive的时刻。然后将短信上传到服务器。代码运行良好,但我听说3.0以上的网络连接需要在异步任务上运行。即使不是这种情况,我也希望将上载移动到另一个线程,这样上载任务就不能阻止UI线程。(我已尝试将服务移动到IntentService,这会导致广播接收器泄漏)Android:在OnReceive方法中启动异步任务,android,android-asynctask,broadcastreceiver,Android,Android Asynctask,Broadcastreceiver,我目前有一个管理广播接收器的服务。此接收器可以关闭和打开 在收到SMS时触发OnReceive的时刻。然后将短信上传到服务器。代码运行良好,但我听说3.0以上的网络连接需要在异步任务上运行。即使不是这种情况,我也希望将上载移动到另一个线程,这样上载任务就不能阻止UI线程。(我已尝试将服务移动到IntentService,这会导致广播接收器泄漏) SMSBR=新的广播接收器(){ @凌驾 公共void onReceive(上下文、意图){ //接收端启动**********************
SMSBR=新的广播接收器(){
@凌驾
公共void onReceive(上下文、意图){
//接收端启动************************
Bundle extras=intent.getExtras();
字符串strMessage=“”;
如果(附加值!=null)
{
Object[]smsextras=(Object[])extras.get(“PDU”);
对于(int i=0;i
让我回答你的问题,不要谈论异步任务:
看看
BroadcastReceiver.registerReceiver(广播接收器,
IntentFilter筛选器、字符串广播权限、处理程序计划程序)
我发现,当我检查一些关于广播接收器的文档时,它看起来正是您所需要的(检查)。还有一个提示:将其与
HandlerThread
结合使用有什么问题?如何将其放入异步任务中?或者您是否应该使用异步任务?如果可以通过调用onReceive()启动AsyncTask?@baske如何在AsyncTask中运行上载?
SMSBR = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
//START OF ONRECIVER************************
Bundle extras = intent.getExtras();
String strMessage = "";
if ( extras != null )
{
Object[] smsextras = (Object[]) extras.get( "pdus" );
for ( int i = 0; i < smsextras.length; i++ )
{
SmsMessage smsmsg = SmsMessage.createFromPdu((byte[])smsextras[i]);
String strMsgBody = smsmsg.getMessageBody().toString();
String strMsgSrc = smsmsg.getOriginatingAddress();
strMessage += "SMS from " + strMsgSrc + " : " + strMsgBody;
Log.d("Message", "is "+strMessage);
//***************************************************************
InputStream is = null;
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://mayar.abertay.ac.uk/~1001077/insert.php");
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("DeviceNumber", telephonyManager.getLine1Number().toString()));
nameValuePairs.add(new BasicNameValuePair("SenderNumber", strMsgSrc));
nameValuePairs.add(new BasicNameValuePair("Message", strMsgBody));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
Log.d("is = ", is.toString());
Log.d("In SMS", "Sender success");
if (Looper.getMainLooper().getThread() == Thread.currentThread()) {
Log.d("Message upload Running", "on UI");
} else {
Log.d("Message upload NOT running", "on UIx");
}
}catch (Exception e){
Log.e("Log_tag", "Error in http sms " + e.toString());
Log.d("In SMS", "Sender NOT success");
}
//****************************************************************
}
}
//END OF ON RECEIVE****************************
}
};