从Home返回我的活动时多个onResume()

时间:2012-12-27 15:25:06

标签: android android-asynctask android-activity

当我从我的(主要)活动中导航然后通过单击主屏幕上的图标返回时 - 活动将自动恢复 - >暂停 - >已恢复。 我期待只有一个onResume()。 我的活动在onResume()函数中创建了一个AsyncTask(活动根本没有调用其他活动),并且当前创建了另外两个AsyncTasks而不是一个。 我做了一些测试,并注意到当Mainfest中将此活动声明为“SingleTask”时会发生这种情况。使用'SingleTop'就可以了,onResume()只调用一次。

HELP!

这是我的主要活动代码:

  public class HomeFinderActivity extends ListActivity implements LocationListener          {
  private TextView latituteField;
  private TextView longitudeField;
  private LocationManager locationManager;
  private String provider;
  private Location location;
  private static final String LOG_TAG = "::HomeFinderActivity->Asynctask";
  private ArrayList<Home> home_parts = new ArrayList<Home>();
  private ListViewAdapter m_adapter;

 /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      Intent intent = getIntent();
      setContentView(R.layout.main);
      latituteField = (TextView) findViewById(R.id.TextView02);
      longitudeField = (TextView) findViewById(R.id.TextView04);

      // instantiate  ListViewAdapter class
      m_adapter = new ListViewAdapter(this, R.layout.row, home_parts);
      setListAdapter(m_adapter);

      locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

      // Define the criteria how to select the locatioin provider -> use
      // default
      Criteria criteria = new Criteria();
      provider = locationManager.getBestProvider(criteria, false);
      location = locationManager.getLastKnownLocation(provider);
  }

  //Asynctask to retrieve cursor from database and sort list by distance
  private class SortList extends AsyncTask<Location, Void, ArrayList<Home>> {
      @Override
      protected ArrayList<Home> doInBackground(Location... location) {
          try {
              if (home_parts.isEmpty()){
                  home_parts=Home.getHomeParts(location[0], getApplicationContext());
          }
              else{
                  for (Home d : home_parts){
                      if (location != null){
                          d.setmDistance((int) (d.getmLatitude()), d.getmLongitude(),(double) (location[0].getLatitude())
                                  , (double) (location[0].getLongitude()));               
                          }  
                  }
              }

          } finally {

          }
          Collections.sort(home_parts, new Comparator(){

              public int compare(Object o1, Object o2) {
                  Home p1 = (Home) o1;
                  Home p2 = (Home) o2;
                  return (int) p1.getmDistance()- (int) p2.getmDistance();
              }
          });
          return home_parts;
      }
      protected void onPostExecute(ArrayList<Home> address) {
            m_adapter = new ListViewAdapter(HomeFinderActivity.this, R.layout.row, address);

            // display the list.
            setListAdapter(m_adapter);
      }
  }
      @Override
  protected void onDestroy() {
      // TODO Auto-generated method stub
      super.onDestroy();

  }
  //starting handling location

  /* Request updates at startup */
  @Override
  protected void onResume() {
      super.onResume();
    Log.e(LOG_TAG, "onResume() started");
      if (location != null) {
          onLocationChanged(location);
      }
      else
      {
          latituteField.setText("Location not available");
          longitudeField.setText("Location not available");
      } 

      locationManager.requestLocationUpdates(provider, 400, 1, this);
  }

  /* Remove the locationlistener updates when Activity is paused */
  @Override
  protected void onPause() {
      super.onPause();
        Log.e(LOG_TAG, "onPause() started");
      locationManager.removeUpdates(this);
  }

  public void onLocationChanged(Location location) {
      int lat = (int) (location.getLatitude());
      int lng = (int) (location.getLongitude());
      latituteField.setText(String.valueOf(lat));
      longitudeField.setText(String.valueOf(lng));
      SortList showList = new SortList();
      showList.execute(location);
  }

  public void onStatusChanged(String provider, int status, Bundle extras) {
      // TODO Auto-generated method stub
  }

  public void onProviderEnabled(String provider) {
  }

  public void onProviderDisabled(String provider) {
  }

  /** Called when the user clicks the Add Entry button */
  public void goAddEntry(View view) {
      Intent intent = new Intent(this, AddEntry.class);
      startActivity(intent);
  } 

}

0 个答案:

没有答案