title: Not able to call runOnUiThread in a thread from inside of a service
body: <p>I wanted to make a service which will check my SMS in every 20 sec if there are any unread SMS then send it to my website then mark as read for posting data to website I used asynctask and it worked fine when I tried manually (by making button click type app)
  but in side service I cant define </p>
  
  <pre><code>runOnUiThread(new Runnable() {
              @Override
              public void run() { new MyAsyncTask().execute(sender,time,message);}
          });
  </code></pre>
  
  <p>it is unable to identify and asks me to define runOnUiThread
  Is there any way to call my asynctask from the place where I am calling in below code </p>
  
  <pre><code>public class TestService extends Service {
  
      String sender = null;
      String time = null;
      String message = null;
  
      @Override
      public IBinder onBind(Intent intent) {
          // TODO: Return the communication channel to the service.
          throw new UnsupportedOperationException("Not yet implemented");
      }
  
      @Override
      public void onCreate() {
          Toast.makeText(getApplicationContext(), "Service Created", 1).show();
          super.onCreate();
      }
  
      @Override
      public void onDestroy() {
          Toast.makeText(getApplicationContext(), "Service Destroy", 1).show();
          super.onDestroy();
      }
  
      @Override
      public int onStartCommand(Intent intent, int flags, int startId) {
          Toast.makeText(getApplicationContext(), "Service Running ", 1).show();
          new Thread(new Runnable() {
  
              public void run() {
                  ContentValues values = new ContentValues();
                  Uri mSmsinboxQueryUri = Uri.parse("content://sms/inbox");
                  String[] columns = new String[] { "_id", "thread_id",
                          "address", "person", "date", "body", "type" };
                  Cursor cursor1 = getContentResolver().query(mSmsinboxQueryUri,
                      null, "read=0", null, null);
                  DateFormat formatter = new SimpleDateFormat(
                      "dd/MM/yyyy hh:mm:ss.SSS");
                  Calendar calendar = Calendar.getInstance();
                  if (cursor1.getCount() &gt; 0) {
                      cursor1.moveToFirst();
                      do {
                          // Retrieving sender number
                          sender = (cursor1.getString(cursor1
                              .getColumnIndex(columns[2])).toString());
                          // Retriving time of reception
                          long ms = cursor1.getLong(cursor1
                              .getColumnIndex(columns[4]));
                          calendar.setTimeInMillis(ms);
                          time = formatter.format(calendar.getTime()).toString();
                          // Retriving the message body
                          message = (cursor1.getString(cursor1
                              .getColumnIndex(columns[5])).toString());
                          runOnUiThread(new Runnable() {
  
                              @Override
                              public void run() {
                                  new MyAsyncTask()
                                      .execute(sender, time, message);
                              }
                          });
                      } while (cursor1.moveToNext());// end of while
                  }// end of if
                      // set as read
                  values.put("read", true);
                  getContentResolver().update(Uri.parse("content://sms/inbox"),
                      values, null, null);
              }
          }).start();
          return super.onStartCommand(intent, flags, startId);
      }
  
      private class MyAsyncTask extends AsyncTask&lt;String, Integer, Double&gt; {
  
          @Override
          protected Double doInBackground(String... params) {
              postData(params[0], params[1], params[2]);
              return null;
          }
  
          protected void onPostExecute(Double result) {
              // pb.setVisibility(View.GONE);
              Toast.makeText(getApplicationContext(), "command sent",
                  Toast.LENGTH_LONG).show();
          }
  
          protected void onProgressUpdate(Integer... progress) {
              // pb.setProgress(progress[0]);
          }
  
          public void postData(String sender, String time, String message) {
              // Create a new HttpClient and Post Header
              HttpClient httpclient = new DefaultHttpClient();
              HttpPost httppost = new HttpPost(
                  "http://www.mysite.co.nf/reciever.php");
              try {
                  // Add your data
                  List&lt;NameValuePair&gt; nameValuePairs = 
                                                  new ArrayList&lt;NameValuePair&gt;();
                  nameValuePairs.add(new BasicNameValuePair("sender", sender));
                  nameValuePairs.add(new BasicNameValuePair("time", time));
                  nameValuePairs.add(new BasicNameValuePair("message", message));
                  httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                  // Execute HTTP Post Request
                  HttpResponse response = httpclient.execute(httppost);
              } catch (ClientProtocolException e) {} catch (IOException e) {}
          }
      }
  }
  </code></pre>