activity

Android学习笔记(4)——Activity生命周期

烂漫一生 提交于 2020-03-01 15:00:52
Android应用程序由很多的 Activity 组成,本例将简单说明Activity的 生命周期 过程: new一个Android应用程序,其中先new两个Activity用来演示(FirstActivity、SecondActivity): FirstActivity: 布局first.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".FirstActivity" > <Button android:id="@+id/myButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello_first" />

Fragment 的使用(1)

女生的网名这么多〃 提交于 2020-03-01 14:39:01
基本: http://www.cnblogs.com/mengdd/archive/2013/01/08/2851368.html 深入: http://blog.csdn.net/pi9nc/article/details/12249619 Fragment  Android是在Android 3.0 (API level 11)开始引入Fragment的。   可以把Fragment想成Activity中的模块,这个模块有自己的布局,有自己的生命周期,单独处理自己的输入,在Activity运行的时候可以加载或者移除Fragment模块。   可以把Fragment设计成可以在多个Activity中复用的模块。 Fragment 生命周期 因为Fragment必须嵌入在Acitivity中使用,所以Fragment的生命周期和它所在的Activity是密切相关的。   如果Activity是暂停状态,其中所有的Fragment都是暂停状态;如果Activity是stopped状态,这个Activity中所有的Fragment都不能被启动;如果Activity被销毁,那么它其中的所有Fragment都会被销毁。 但是,当Activity在活动状态,可以独立控制Fragment的状态,比如加上或者移除Fragment。  当这样进行fragment transaction(转换

onSaveInstanceState与onRestoreInstance

◇◆丶佛笑我妖孽 提交于 2020-03-01 13:29:01
当Activity变得容易被系统销毁的时候,什么叫容易被销毁呢, 比如Activity停留在stop状态且系统内存不足的时, 这时候 系统会自动调用 onSaveInstanceState(Bundle outState)方法来临时保存Activity的一些数据,也可以自己重写此方法, 保存一些自己想保存的数据,比如视频的播放进度等。 如果Activity是用户主动销毁,如按了back键退出activity或是调用了activity的finish方法等得时候,系统是不会执行 onSaveInstanceState方法。 一下操作可能会执行onSaveInstanceState方法 具体还需自己写个demo验证 1.当用户按下HOME键时 2.长按HOME键,选择运行其他的程序时 3.按下电源按键(关闭屏幕显示)时 4.从activity A中启动一个新的activity时 5.屏幕方向切换时,例如从竖屏切换到横屏时 在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A, 所以onSaveInstanceState一定会被执行 总而言之,onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任

正在获取异常“ IllegalStateException:onSaveInstanceState之后无法执行此操作”

依然范特西╮ 提交于 2020-03-01 12:54:20
我有一个Live Android应用程序,从市场上我收到了以下堆栈跟踪信息,我不知道为什么它发生在应用程序代码中而不是发生,而是由应用程序中的某些或其他事件引起的(假设) 我没有使用Fragments,但仍然有FragmentManager的引用。 如果有人可以对某些隐藏的事实有所了解,以避免此类问题: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1109) at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:399) at android.app.Activity.onBackPressed(Activity.java:2066) at android.app.Activity.onKeyDown(Activity.java:1962) at android.view.KeyEvent.dispatch(KeyEvent.java:2482) at android.app.Activity

Activity、Task、应用和进程

假如想象 提交于 2020-03-01 12:05:06
很想弄清楚启动一个Activity和Task(任务)的关系,网上也有很多相关资料,由从源码来具体分析的,也有针对launchmode来分析,但都不是自己的,理解起来总不是那么容易,为此,尝试着自己去理解其中的逻辑。不过事先需要弄清楚两个问题: 谁负责管理Activity? Android的framework框架中采用C/S的方式实现由后台服务ActivityManagerService(很多书上将其简称为Ams)来管理具体的Acitivity实例,虽然Ams命名为ActivityManagerService,但是它其实不仅仅管理Activity,他还管理除Acitvity外的其它三大组件,还包括Intent、pendingintent、apk进程和task等等,具体可以查看源码frameworks\base\services\java\com\android\server\am下面的Ams源码和相关的*Record类。 网上资料显示在2.3以后的SDK中,Ams将原来的HistoryRecord类重新命名为ActivityRecord类,并将其原来Ams中的一些处理抽出来成为一个ActivityStack类,每一个Activity实例对应一个ActivityRecord对象,并存放在ActivityStack中,手机一旦启动,就会启动一个Ams服务

不要通过Application Object或者其他全局静态变量来存放数据

家住魔仙堡 提交于 2020-03-01 09:46:30
不要通过Application Object或者其他全局静态变量来存放数据 转载请注明来自:http://blog.csdn.net/liaoqianchuan00/article/details/24399093 翻译自: http://www.developerphil.com/dont-store-data-in-the-application-object/ 概述 在我们的应用程序中,很多地方可能用到同一个数据。很多时候我们可能不想通过Intent在Activity之间传递或者持久化的存放这些数据来。 我们可能会将这些数据存放在Application对象中,这样我们就可以在所有的Activity中访问了。这个方法很简单,但是实际上是完全错误的。 你的程序可能会因为NullPointerException而crash掉,因为上面的方案是基于你假设你存放的数据一直都在那里的。 例子 Application对象: // access modifiers omitted for brevity class MyApplication extends Application { String name; String getName() { returnname; } void setName(String name) { this.name= name; } }

结队编程study

人盡茶涼 提交于 2020-03-01 06:00:12
##今天针对study进行结队编程,我和搭档张佳慧刚开始误认为SystemBarTintManager,baseActivity是personalActivity跳转的下一个界面,因为这个代码个人中心运行时候是一个空的界面,并且里面默认代码。## ##后经过验证SystemBarTintManager,baseActivity是一个沉浸式通知栏,它的运行就相当于美观界面运行,一直运行在程序上方,类似搜索小图层那样。后面我们就开始对personalActivity进行一个优化程序编程,并且对相对的XML进行设计。## ##下面是沉浸式通知栏的代码和调用## ##代码## ·········· import android.annotation.SuppressLint;import android.annotation.TargetApi;import android.app.Activity;import android.content.Context;import android.content.res.Configuration;import android.content.res.Resources;import android.content.res.TypedArray;import android.graphics.drawable.Drawable;import

startActivity 报错

有些话、适合烂在心里 提交于 2020-03-01 04:02:50
原因是:   Context中有一个startActivity方法,Activity继承自Context,重载了startActivity方法。如果 使用 Activity的startActivity方法,不会有任何限制,而如果使用Context的startActivity方法的话,就需要开启一个新 的task,遇到上面那个异常的,都是因为使用了Context的startActivity方法。解决办法是,加一个flag。 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 修改后代码如下: Intent intent = new Intent(); intent.setClass(mContext, PhotoView.class); Bundle bundle = new Bundle(); intent.putExtras(bundle); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(intent); 来源: oschina 链接: https://my.oschina.net/u/2447831/blog/625912

Android activity跳转exception

心不动则不痛 提交于 2020-03-01 04:01:58
log: java.lang.RuntimeException: Unable to start receiver com.vkoov.csipsimple.service.OutgoingCall: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? at android.app.ActivityThread.handleReceiver(ActivityThread.java:2126) at android.app.ActivityThread.access$1500(ActivityThread.java:123) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1197) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app

startActivity的requires new task异常解析

我是研究僧i 提交于 2020-03-01 03:37:06
很多人使用startActivity时候,会碰到如下的异常: Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 都知道,Context中有一个startActivity方法,Activity继承自Context,重载了startActivity方法。如果使用Activity的startActivity方法,不会有任何限制,而如果使用Context的startActivity方法的话,就需要开启一个新的task,遇到上面那个异常的,都是因为使用了Context的startActivity方法。解决办法是,加一个flag。 Java代码 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 这样就可以再新的task里面启动这个Activity了。 来源: oschina 链接: https://my.oschina.net/u/1244156/blog/208520