系统重温安卓

做过好几个简单的安卓小项目后,常常觉得自己的水平常常处于能做出来东西,但是原理等有时会很模糊,所以重温重温原理


首先是四大组件之 Activity:

首先是Activity的主要框架:


public class  Activity extends Activity {


 @Override  

 public void onCreate(Bundle savedInstanceState) {                            //创建时调用,通常情况下在这里处理获取layout后找到控件,并建立监听

  super.onCreate(savedInstanceState);    

  setContentView(R.layout.lifecycle);  

}


 @Override  

 protected void onStart()                                                                  //创建时调用,重建时调用

{

super.onStart();  

}


  @Override  

   protected void onRestart() {                                                        //重新回到前台时调用

        super.onRestart();  

}


@Override  

    protected void onResume() {                                                       //创建和回到前台调用

super.onResume();  

}  


@Override  

    protected void onPause() {                                        //activity被覆盖或者锁屏时调用

        super.onPause();  

}


@Override  

    protected void onStop() {  

super.onStop();  

}

@Override  

    protected void onDestroy() {  

 super.onDestroy();  

}


//对比常见的这几个方法还有三种用的多的方法


//Activity窗口获得或失去焦点时被调用,在onResume之后或onPause之后  

@Override 

    public void onWindowFocusChanged(boolean hasFocus) { 

       super.onWindowFocusChanged(hasFocus); 

        Log.i(TAG, "onWindowFocusChanged called."); 

    }


/** 





               * Activity被系统杀死时被调用. 


               * 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死. 

               * 另外,当跳转到其他Activity或者按Home键回到主屏时该方法也会被调用,系统是为了保存当前View组件的状态. 

               * 在onPause之前被调用. 

               */  

              @Override  

              protected void onSaveInstanceState(Bundle outState) {  

                  outState.putInt("param", param);  

                  Log.i(TAG, "onSaveInstanceState called. put param: " + param);  

                  super.onSaveInstanceState(outState);  

              }  

                

              /** 

               * Activity被系统杀死后再重建时被调用. 

               * 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死,用户又启动该Activity. 

               * 这两种情况下onRestoreInstanceState都会被调用,在onStart之后. 

               */  

              @Override  

              protected void onRestoreInstanceState(Bundle savedInstanceState) {  

                  param = savedInstanceState.getInt("param");  

                  Log.i(TAG, "onRestoreInstanceState called. get param: " + param);  

                  super.onRestoreInstanceState(savedInstanceState);  

              }    

          }


          数据传送方面:一个activity跳到另外一个activity,附带传值有好几种方式:传的值都是简单的,若要传ArrayList,则要使用Serializable或Parcalable

          最常用的:

          Intent it=new Intent(A.this,TwoMainActivity.class);      //A到B,  附带值1       
             it.putExtra("key", 1);
             startActivity(it);

          B接收:

          Bundle bundle=new Bundle();
            bundle=this.getIntent().getExtras();
            String sw=bundle.getString("key");                 //根据A发来的值类型进行接收


          传ArrayList:

          首先来个数据类:

          public class MyClass implements Serializable{
           private String username;
           private String psw;
           private  int age;
           public String getUsername() {
            return username;
           }
           public void setUsername(String username) {
            this.username = username;
           }
           public String getPsw() {
            return psw;
           }
           public void setPsw(String psw) {
            this.psw = psw;
           }
           public int getAge() {
            return age;
           }
           public void setAge(int age) {
            this.age = age;
           }

          }


          然后从A到B:

           ArrayList<MyClass> arrayList=new ArrayList<MyClass>();
             for(int i=0;i<10;i++)
             {
               MyClass myclass=new MyClass();
               myclass.setUsername("a"+i);
               myclass.setPsw("b"+i);
               myclass.setAge(1+i);
               arrayList.add(myclass);
             }
             Intent its=new Intent(this,TwoMainActivity.class);
             its.putExtra("key", arrayList);
             startActivity(its);


          B接收:

           ArrayList<MyClass> arrayList=(ArrayList<MyClass>) this.getIntent().getSerializableExtra("key");
            String result="";
            for(MyClass myclass:arrayList)
            {
             result+=myclass.getUsername()+"----"+myclass.getPsw()+"---"+myclass.getAge()+"\n";
            }


          使用Parcelable方法来传送:为什么有两种,Parcelable虽然复杂,但是对内存有益,所以用:

          来个数据类:

          public class MyClass2 implements Parcelable{
           
           private String username;
           private String psw;
           private  int age;
           public String getUsername() {
            return username;
           }
           public void setUsername(String username) {
            this.username = username;
           }
           public String getPsw() {
            return psw;
           }
           public void setPsw(String psw) {
            this.psw = psw;
           }
           public int getAge() {
            return age;
           }
           public void setAge(int age) {
            this.age = age;
           }

           //静态Parcelable.Creator接口
           public static final Parcelable.Creator<MyClass2> CREATOR=new Creator<MyClass2>()
             {
            
             public MyClass2 createFromParcel(Parcel source)
             {
              MyClass2 myClass2=new MyClass2();
              myClass2.setUsername(source.readString());
              myClass2.setPsw(source.readString());
              myClass2.setAge(source.readInt());
              return myClass2;
             }
             public MyClass2[] newArray(int size)
             {
              return new MyClass2[size];
             }
             };
           @Override
           public int describeContents() {
            // TODO Auto-generated method stub
            return 0;
           }

           //将数据写入外部提供的Parcel
           @Override
           public void writeToParcel(Parcel arg0, int arg1) {
            arg0.writeString(this.getUsername());
            arg0.writeString(this.getPsw());
            arg0.writeInt(this.getAge());
            
           }
           
           
           

          }


          传送:

          ArrayList<MyClass2> arrayList=new ArrayList<MyClass2>();
             for(int i=0;i<10;i++)
             {
               MyClass2 myclass=new MyClass2();
               myclass.setUsername("a"+i);
               myclass.setPsw("b"+i);
               myclass.setAge(1+i);
               arrayList.add(myclass);
             }
             Intent its=new Intent(this,TwoMainActivity.class);
            its.putExtra("key", arrayList);   
             startActivity(its);
             


          接收:


            ArrayList<MyClass2> arrayList=(ArrayList<MyClass2>)this.getIntent().getSerializableExtra("key");
            String result="";
            for(MyClass2 myclass:arrayList)
            {
             result+=myclass.getUsername()+"----"+myclass.getPsw()+"---"+myclass.getAge()+"\n";
            }


          注意:无论是SerialzableExtra还是Parcel    :

          传送都用putExtra("key","value");

          接收都是this.getIntent().getSerializableExtra("key");




          接下来介绍另外一中启动:A跳B,传一个值给B,B销毁时,返回给A一个值:

          Intent its=new Intent(A.this,TwoMainActivity.class);     A到B,并且传一个请求码:1
            
             startActivityForResult(its, 1);


          在B中:

           Intent its=new Intent(this,MainActivity.class);
            its.putExtra("s", "swf");
            setResult(100, its);                                //返回码穿回给A,A可以通过返回码取得Intent中的值


          在A中,接收销毁时返回来的码

          @Override
           protected void onActivityResult(int requestCode,int resultCode,Intent data)
           {
            int request=requestCode;
            int ssw=resultCode;
            Bundle bundle=data.getExtras();
            String asd="";
            if(bundle!=null)
            {
             asd=bundle.getString("s");
            }
            
            String ss=asd;
            String sw=ss;
           }


          现总结至此:


















          
          评论
          添加红包

          请填写红包祝福语或标题

          红包个数最小为10个

          红包金额最低5元

          当前余额3.43前往充值 >
          需支付:10.00
          成就一亿技术人!
          领取后你会自动成为博主和红包主的粉丝 规则
          hope_wisdom
          发出的红包
          实付
          使用余额支付
          点击重新获取
          扫码支付
          钱包余额 0

          抵扣说明:

          1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
          2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

          余额充值