Activity

Activity

生命周期

(启动)onCreate    (不可见)  ->  onStart  (可见)  ->    onResume    (进入前台)
(销毁)onDestroy   <-  (停止,onRestart) onStop   <-  (进入后台)onPause

Activity切换

A.startActivity(B);
A.onPause()
B.onCreate()
B.onStart()
B.onResume()
A.onSaveInstanceState()
A.onStop()

home和back

点击home键当前activity会被暂停,进入后台。
back键系统会销毁当前activity。

Activity配置

在启动Activity,AMS会检查待启动Activity是否在manifest.xml中配置过,如果没有进行配置,则跑出异常:ActivityNotFoundException

    <activity
            android:name=".ui.MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.SubActivity"
            android:screenOrientation="portrait" />

Activity启动

显示

Intent intent = new Intent(Context, Class);
startActivity(intnet);

隐示

数据传递

        Intent intent = new Intent(this,SecondActivity.class);
        //1. 直接设置,内部也是使用Bundle
        intent.putExtra("key", "value");

        //2. 使用bundle
        Bundle bundle = new Bundle();
        bundle.putString("key", "value");
        intent.putExtra("bundle",bundle);
        startActivity(intent);

Intent的源码

public class Intent implements Parcelable, Cloneable {
private Bundle mExtras;
public Intent putExtra(String name, String value) {
        if (mExtras == null) {
            mExtras = new Bundle();
        }
        mExtras.putString(name, value);
        return this;
    }
}

Bundle

public final class Bundle extends BaseBundle implements Cloneable, Parcelable {
    public void putString(@Nullable String key, @Nullable String value) {
        unparcel();
        mMap.put(key, value);
    }
}

public class BaseBundle {
    
    ArrayMap<String, Object> mMap = null;

    BaseBundle(@Nullable ClassLoader loader, int capacity) {
        mMap = capacity > 0 ?
                new ArrayMap<String, Object>(capacity) : new ArrayMap<String, Object>();
        mClassLoader = loader == null ? getClass().getClassLoader() : loader;
    }
    
    BaseBundle() {
        this((ClassLoader) null, 0);
    }
    
    public void putString(@Nullable String key, @Nullable String value) {
        unparcel();
        mMap.put(key, value);
    }


版本兼容

有时候在高版本上开发时到兼容低版本的手机上,就需要对版本进行检测


public void btnOnclick(){
        int cx = btn_open.getWidth()/2;
        int cy = btn_open.getHeight()/2;

        float radius = btn_open.getWidth();
        //使用5.0的特性,这里先做检查,如果不做检查的话,在低版本上运行会崩溃。
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            Animator anim = ViewAnimationUtils.createCircularReveal(btn_open,cx,cy,radius,0);
            anim.addListener(new AnimatorListenerAdapter() {

            });
        }
}

通过检查版本号基本上程序就可以运行了。如果设置完项目还提示错误的话就要使用下面的标签。以前在eclipse上使用lint会提示错误,但是现在使用studio时没有提示,还不知道什么原因。

@TargetApi(21)

告诉编译器在低于版本号21的机器上不要提示错误。

@SuppressLint("NewApi")

如果api版本高于最低版本,则忽略错误提示

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、概述 Activity 作为与用户交互的一个窗口,是使用非常频繁的一个基本组件。Android系统是通过Act...
    三也视界阅读 2,269评论 3 11
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,461评论 25 708
  • 曾去太行昆山村,岭秀寂静少人闻。 偶有写生学生过,鸡犬之声如乡魂。 寻果误入歧途路,突遇画师点白云。 长想隐居此山...
    绿野V仙踪阅读 335评论 0 0
  • 入冬了,空气里透着丝丝凉意,银杏却把温暖传到了心里。金黄的肤色褪去了太阳的焦灼,多了份体贴的柔和,久久仰望满眼婆娑...
    mjhjht阅读 330评论 5 1
  • 那天路过一户人家,门口坐着一个小姑娘,应该高二的年纪,拿着手机看视频,嘴里时不时爆出一句脏话,听得我莫名一震。 我...
    木头姑娘阅读 198评论 0 0