Android基础巩固



    • Android基础学习笔记
    • 复杂控件学习记录
    • 参考《第一行代码(第二版)》、GoogleDeveloper等


  • Context

    • Context是维持Android程序中各组件能够正常工作的一个核心功能类。
    • 弹出Toast、启动Activity、启动Service、发送广播、操作数据库等等都需要用到Context。
    •   TextView tv = new TextView(getContext());
      
        ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);
      
        AudioManager am = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);getApplicationContext().getSharedPreferences(name, mode);
      
        getApplicationContext().getContentResolver().query(uri, ...);
      
        getContext().getResources().getDisplayMetrics().widthPixels * 5 / 8;
      
        getContext().startActivity(intent);
      
        getContext().startService(intent);
      
        getContext().sendBroadcast(intent);
      

    Bundle savedInstanceState

    • onCreate方法的完整定义如下:

        public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        }
      
    • 从上面的代码可以看出,onCreate方法的参数是一个Bundle类型的参数。Bundle类型的数据与Map类型的数据相似,都是以key-value的形式存储数据的。

    • 从字面上看savedInstanceState,是保存实例状态的。实际上,savedInstanceState也就是保存Activity的状态的

    • eg. SnakeView in SnakeGame :

    •   private int[] coordArrayListToArray(ArrayListcvec) {
                int count = cvec.size();
                int[] rawArray = new int[count * 2];
                for (int index = 0; index < count; index++) {
                    Coordinate c = cvec.get(index);
                    rawArray[2 * index] = c.x;
                    rawArray[2 * index + 1] = c.y;
                }
                return rawArray;
            }
            
            public Bundle saveState() {
                Bundle map = new Bundle();
                map.putIntArray("mAppleList", coordArrayListToArray(mAppleList));
                map.putInt("mDirection", Integer.valueOf(mDirection));
                map.putInt("mNextDirection", Integer.valueOf(mNextDirection));
                map.putLong("mMoveDelay", Long.valueOf(mMoveDelay));
                map.putLong("mScore", Long.valueOf(mScore));
                map.putIntArray("mSnakeTrail", coordArrayListToArray(mSnakeTrail));
                return map;
            }
        在snakeActivity中实现
        @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.snake_layout);
                mSnakeView = (SnakeView) findViewById(R.id.snake);
                mSnakeView.setTextView((TextView) findViewById(R.id.text));
                if (savedInstanceState == null) {
                    // We were just launched -- set up a new game
                    mSnakeView.setMode(SnakeView.READY);
                } else {
                    // We are being restored
                    Bundle map = savedInstanceState.getBundle(ICICLE_KEY);
                    if (map != null) {
                        mSnakeView.restoreState(map);
                    } else {
                        mSnakeView.setMode(SnakeView.PAUSE);
                    }
                }
            }
        并重写onSavedInstanceState(),此方法会在activity结束时,调用.
            @Override
            public void onSaveInstanceState(Bundle outState) {
                //Store the game state
                outState.putBundle(ICICLE_KEY, mSnakeView.saveState());
            }

 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

与 Dian 的连接断开,我们正在尝试重连,请耐心等待