apk学习_第一阶段Activity总结

 

一丶Activity

 

概念:activity是安卓四大组件之一,用于显示用户界面,可以理解成手机屏幕。它存储在Task中,遵循先进后出的原则。

生命周期:启动一个activity时,执行顺序为onCreate -> onStart -> onResume;

结束activity时执行顺序为:onPause(可见不可交互) -> onStop(不可见) -> onDestroy;

当当前activity不可见时,比如突然来电话了,执行顺序为:onPause ->onStop,恢复时执行顺序为onRestart -> onStart -> onResume;

而当当前activity变成透明或弹出Dialog时,activity执行onPause,恢复时执行onResume

注意:被暂停的activity在内存不足而当前activity需要内存时会被kill掉

 

Activity完整生命周期如下图:

 

 

 

创建一个Activity:1.新建一个activity,默认创建布局文件.xml

2.重写activity中的onCreat(),利用setContentView()设置要显示的布局文件以及对一些组件进行初始化操作

例如:

public class CrimeActivity extends AppCompatActivity {

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
       
setContentView(R.layout.activity_crime); // 设置布局界面

       
Button mButton = (Button) findViewById(R.id.button_test)//获取按钮对象
       
mButton.setOnClickListener(new View.OnClickListener() {
           
@Override
            
public void onClick(View v) {
               
//点击事件
           
}
        })
;

   
}
}

3.在AndroidManifest.xml中进行activity的显示设置

例如:

<activity android:name=".CrimeActivity"
    android:icon="图标"
    android:label="标题"
    android:theme="主题">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

 

启动Activity:1.单纯启动一个activity:

通过startActivity()来启动一个activity,参数为一个Intent对象,获取Intent对象可以通过显示或隐式来获得,最常见的为:

startActivity(newIntent(当前Act.this,要启动的Act.class));

通过包名来启动activity:

Intent intent = getPackageManager().getLaunchIntentForPackage("apk第一个启动的Activity的全限定类名") ;

if(intent != null) startActivity(intent) ;

 

2.需要接收子activity返回来的数据

  通过startActivityForResult(Intent intent, IntrequestCode)启动,重写onActivityResult(int requestCode, intresultCode, Intent intent)来处理接并处理收子类数据,子类中通过setResut(intresultCode[ ,ntent intent]

3.activity之间数据传输:多个数据传输可以借助Bundle对象

 

 

mAnswer = getIntent().getBooleanExtra("answer", false) ;

 

Activity加载模式:加载模式在AndroidManifest.xml进行设置,属性为launchMode

                     模式一:standard  此方式为默认方式。每次启动一个activity都会创建一个实例压入栈顶中

 

                     模式二:simgleTop 此方式和standard区别是,如果activity存在与栈顶,则不创建实例,只要不在顶都会创建实例

                     模式三:singleTask  a.如果没有activity实例,则创建一个实例压入栈顶

                                          b.如果存在activity实例且在栈顶,则不会创建另一个实例

                                         c.如果存在activity实例但不再栈顶,则会销毁此activity上的其它实例,让自己处于栈顶

                     模式四:singleInstance a.如果activity不存在,则会创建另一个Task来容纳activity实例进行显示

                                            b.如果activity存在,则会直接调用实例存在的那个Task,让其显示在当前界面

 

 

 

解决因横屏导致数据丢失的情况:重写activity中onSaveInstanceState(Bundle outState )方法,将数据保存在Bundle对象中,然后在onCreat()方法中取出数据加入初始化

例如:

1.activity中重写onSaveInstanceState存入数据

   @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("data", String.valueOf(mShowAnswer.getText()));
        outState.putBoolean("ischeat", true);
    }
}

2.在onCreat()方法中设置数据

if (savedInstanceState != null){
mShowAnswer.setText(savedInstanceState.getString("data"));
isCheat(savedInstanceState.getBoolean("ischeat"));
}

                    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值