Android:在OnReceive方法中启动异步任务

Android:在OnReceive方法中启动异步任务,android,android-asynctask,broadcastreceiver,Android,Android Asynctask,Broadcastreceiver,我目前有一个管理广播接收器的服务。此接收器可以关闭和打开 在收到SMS时触发OnReceive的时刻。然后将短信上传到服务器。代码运行良好,但我听说3.0以上的网络连接需要在异步任务上运行。即使不是这种情况,我也希望将上载移动到另一个线程,这样上载任务就不能阻止UI线程。(我已尝试将服务移动到IntentService,这会导致广播接收器泄漏) SMSBR=新的广播接收器(){ @凌驾 公共void onReceive(上下文、意图){ //接收端启动**********************

我目前有一个管理广播接收器的服务。此接收器可以关闭和打开

在收到SMS时触发OnReceive的时刻。然后将短信上传到服务器。代码运行良好,但我听说3.0以上的网络连接需要在异步任务上运行。即使不是这种情况,我也希望将上载移动到另一个线程,这样上载任务就不能阻止UI线程。(我已尝试将服务移动到IntentService,这会导致广播接收器泄漏)

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****************************
            }


          };