onCreate不断被调用

时间:2014-01-20 09:06:44

标签: java android listview oncreate ion-koush

我有一个简单的活动,通过ArrayAdapter将一些数据绑定到listView。我在onCreate上祝酒。如果我让手机独自停留几秒钟,那么吐司就会再次出现。关于这是怎么回事,我完全无能为力。我在下面发布我的代码。也许我错过了我不知道的应用程序不可或缺的部分。

package com.eghdk.myapp.gui;

import java.util.ArrayList;

import android.annotation.TargetApi;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.koushikdutta.async.future.FutureCallback;
import com.koushikdutta.ion.Ion;
import com.eghdk.myapp.R;
import com.eghdk.myapp.adapters.MyAdapter;
import com.eghdk.myapp.util.AppUtil;
import com.eghdk.myapp.util.MyPost;

public class ActivityMyBlog extends ListActivity {
    MyAdapter adapter;
    ArrayList<MyPost> myPostArrayList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_blog);
        // Show the Up button in the action bar.
        setupActionBar();


        if (!AppUtil.isNetworkAvailable(this)) {
            Log.d("", "No network.");

        } else {
            Log.d("", "Connection detected. Will try to load from web.");
            loadDataFromWeb(1, 40);
        }

        if (adapter == null) {

            Toast.makeText(this, "adapter is null", 0).show();

        } else {
        }

    }

    @Override
    public Object getLastNonConfigurationInstance() {
        return (getListAdapter());
    }

    /**
     * Set up the {@link android.app.ActionBar}, if the API is available.
     */
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    private void setupActionBar() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            getActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

    // @Override
    // public boolean onCreateOptionsMenu(Menu menu) {
    // // Inflate the menu; this adds items to the action bar if it is present.
    // getMenuInflater().inflate(R.menu.activity_my_blog, menu);
    // return true;
    // }
    //
    // @Override
    // public boolean onOptionsItemSelected(MenuItem item) {
    // switch (item.getItemId()) {
    // case android.R.id.home:
    // // This ID represents the Home or Up button. In the case of this
    // // activity, the Up button is shown. Use NavUtils to allow users
    // // to navigate up one level in the application structure. For
    // // more details, see the Navigation pattern on Android Design:
    // //
    // //
    // http://developer.android.com/design/patterns/navigation.html#up-vs-back
    // //
    // NavUtils.navigateUpFromSameTask(this);
    // return true;
    // }
    // return super.onOptionsItemSelected(item);
    // }

    public void loadDataFromWeb(int page, int count) {

        myPostArrayList = new ArrayList<MyPost>();

        Ion.with(
                ActivityMyBlog.this,
                "http://myblog.com/api/get_posts/?page=" + page + "&count="
                        + count).asJsonObject()
                .setCallback(new FutureCallback<JsonObject>() {
                    @Override
                    public void onCompleted(Exception e, JsonObject result) {

                        //Edited this json code out for easier reading

                            myPost.setAttachmenUrl("http://myblog.com/img.png");
                            myPost.setPostTitle("Title");
                            myPost.setPostContent("Content");
                            myPost.setPostUrl("http://myblog.com/mypost");
                            myPost.setAuthorName("EGHDK");

                            myPostArrayList.add(myPost);

                        }
                        // END OF EVERY POST LOOP
                        Log.d("DEBUG", "4");
                        adapter = new MyAdapter(ActivityMyBlog.this,
                                R.layout.row, myPostArrayList);
                        setListAdapter(adapter);
                    }
                });

    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
        Intent intent = new Intent(this, ActivityMyBlogDetail.class);
        intent.putExtra("atUrl", myPostArrayList.get(position)
                .getAttachmenUrl());
        intent.putExtra("content", myPostArrayList.get(position)
                .getPostContent());
        intent.putExtra("title", myPostArrayList.get(position)
                .getPostTitle());
        intent.putExtra("url", myPostArrayList.get(position).getPostUrl());

        startActivity(intent);
    }
}

这是我的 isNetworkAvailable 方法:

    public static boolean isNetworkAvailable(Context context) {
        ConnectivityManager manager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = manager.getActiveNetworkInfo();

        boolean isAvailable = false;

        if (networkInfo != null && networkInfo.isConnected()) {

            isAvailable = true;
        }

        return isAvailable;
    }

这是我的ArrayAdapter中的getView方法:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.row, parent, false);
        }
        ((TextView) convertView.findViewById(R.id.titleTextView)).setText(Html
                .fromHtml(postsArrayList.get(position).getPostTitle()));
        ImageView image = (ImageView) convertView
                .findViewById(R.id.postImageView);
            //Library to help with loading of images
        UrlImageViewHelper.setUrlDrawable(image, postsArrayList.get(position)
                .getAttachmenUrl());
        ((TextView) convertView.findViewById(R.id.subTextView)).setText(Html
                .fromHtml(postsArrayList.get(position).getAuthorName()));

        return convertView;
    }

更新

我还有另一部手机作为秒表使用,试了两次。

我强行关闭应用程序。

  1. 我打开了应用程序,屏幕在2分钟后昏暗,45秒钟后我举杯祝酒。

  2. 我打开了应用程序和屏幕48秒后,我得到了祝酒词。

  3. 这不对。我确定android应用程序生命周期不能像这样工作。一定是另一个问题。我在我的Android 4.4 LG G2上使用它。

    更新2:

    插入日志

    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        Log.d("STOP", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
    }
    

    结果:

    01-20 04:42:51.792: D/STOP(4817): XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    01-20 04:42:51.852: D/(4817): No network. Will use values from database.
    01-20 04:42:51.922: I/ActivityManager(4817): Timeline: Activity_idle id: android.os.BinderProxy@420465c0 time:15096283
    01-20 04:42:52.432: D/STOP(4817): XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    01-20 04:42:52.512: D/(4817): No network. Will use values from database.
    

0 个答案:

没有答案