总结

1、activity生命周期

onCreate onStart onResume onPause onStop onDestroy

activity A 跳转到activity B

A.onPause -> B.onCreate -> B.onStart -> B.onResume -> A.onStop -> A.onDestroy(A.onDestroy被回收的时候才会调用)

2、activity的启动模式

standard、singleTop、singleTask、singleInstance 

singleTask启动模式启动Activity时,首先会根据taskAffinity去寻找当前是否存在一个对应名字的任务栈

  • 如果不存在,则会创建一个新的Task,并创建新的Activity实例入栈到新创建的Task中去
  • 如果存在,则得到该任务栈,查找该任务栈中是否存在该Activity实例 
                  如果存在实例,则将它上面的Activity实例都出栈,然后回调启动的Activity实例的onNewIntent方法 
                  如果不存在该实例,则新建Activity,并入栈 
    此外,我们可以将两个不同App中的Activity设置为相同的taskAffinity,这样虽然在不同的应用中,但是Activity会被分配到同一个Task中去。
     
  • 由于具有“singleTask”或“singleInstance”启动模式的 Activity 只能位于任务的根,因此更改父项仅限于“standard”和“singleTop”模式
singleInstance的activity是单独存在一个任务栈中,

1、当一个应用程序加载一个singleInstance模式的Activity时,如果该Activity没有被实例化,那么就重新创建一个Task,并入栈,如果已经被实例化,那么就调用该Activity的onNewIntent;

2、singleInstance的Activity所在的Task不允许存在其他Activity,任何从该Activity加载的其它 Actiivty(假设为Activity2)都会被放入其它的Task中,如果存在与Activity2相同affinity的Task,则在该 Task内创建Activity2。如果不存在,则重新生成新的Task并入栈。

allowTaskReparenting属性,当某个拥有相同 affinity 的任务即将返回前台时,Activity 是否能从启动时的任务转移至此任务中去 —“true”表示可以移动,“false”表示它必须留在启动时的任务中

3、android 横竖屏切换

1. 屏幕不旋转
在AndroidManifest文件中的对应Activity中配置android:screenOrientation=”landscape”(横屏,portrait是竖屏);
2. 屏幕旋转时不重新走生命周期
在AndroidManifest文件中的对应Activity中配置android:configChanges="keyboardHidden|orientation|screenSize",最好这三个都配置,否则不能适配所有机型或sdk版本。

默认情况下,屏幕会旋转并且会重新走生命周期。

切横屏,生命周期方法走一遍,切竖屏,生命周期方法走两遍 (用华为mate7测试,切竖屏也是走一遍生命周期)

4、fragment生命周期

onAttach onCreate onCreateView onActivityCreated onStart onResume onPause onStop onDestroyView onDestroy onDetach


5、fragment与activity传值

activity传值给fragment:

1、通过Bundle

Bundle bundle = new Bundle();

bundle.putString(Constant.INTENT_ID, productId);

Fragment fragment = new Fragment();

fragment.setArguments(bundel);

        2在宿主Activity中定义方法,将要传递的值传递到Fragment中,在Fragment中的onAttach方法中,获取到这个值

1)宿主activity中的getTitles()方法

public String getTitles(){    return "hello";
}

(2)Fragment中的onAttach方法

public void onAttach(Activity activity) {    super.onAttach(activity);
    titles = ((MainActivity) activity).getTitles();//通过强转成宿主activity,就可以获取到传递过来的数据
}

fragment传值给activity

1、Handler方式,在activity中定义Handler,然后在fragment中获取到activity的handler,发送消息

2、广播

3、EventBus

4、在fragment中定义接口,然后activity中实现该接口

//MainActivity实现MainFragment开放的接口
public class MainActivity extends FragmentActivity implements FragmentListener{
@override
public void toH5Page() { }
}

 
 
public class MainFragment extends Fragment{
    public FragmentListener mListener;
    //MainFragment开放的接口
    public static interface FragmentListener{
        //跳到h5页面
        void toH5Page();
    }
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        //对传递进来的Activity进行接口转换
        if(activity instance FragmentListener){
    mListener = ((FragmentListener)activity);
        }
    }
...其他处理
}







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值