Articles of android activity

onCreate,onCreateOptionsMenu,onResume,执行的顺序是什么?

对不起,如果这个问题之前被问到…好吧无论如何,标题问,onCreateOptionsMenu执行什么时候? 之前或之后onResume? 在我的应用程序中,当活动第一次运行/打开订单将onCreate – > onResume – > onCreateOptionsMenu 但如果我改变设备的方向,它会自动调用onDestroy,从而活动将被重新创build,在这种情况下,订单将onCreate – > onCreateOptionsMenu – > onResume 我现在很困惑…有人可以解释一下吗?

点击应用程序的启动图标时会发生什么?

当你点击一个应用程序的启动图标时会发生什么? 总是发送一个新的意图,或者是有时候像从最近的任务中恢复任务一样? 如果意图被发送,它何时被发送到新的活动实例的onCreate()方法,什么时候通过现有活动的onNewIntent()路由? 假设意图通过任务中现有活动的onNewIntent()路由。 它发送到哪个活动? 最靠近顶部还是最靠近根部的那个? 它会始终被发送到应用程序启动活动的实例,还是有时会被发送到与根相同的活动? 它能否被发送到与根不相同的活动? 最后,这一切又是如何受到各项活动的启动模式(标准,单顶,单实例,单任务)的影响? 如果有谁了解这一切,请帮助我!

savedInstanceState vs getIntent()。getExtras()

我遇到了两种不同的types,让我的活动基于一些参数运行。 第一个是savedInstanceState ,另一个是getIntent.getExtras() Q1)所以我不明白的是,一旦我把捆绑到我的活动,然后开始,它应该有捆绑。 但是,如果由于某种原因再次重新创build活动,则应该重新包装相同的包。 (我对吗?) Q2)基于事实Q1是真实的,事实上,我不能只是一旦活动已经开始重写捆绑,我猜如果由于某种原因在我已经开始的活动,我想改变一些params的捆绑,我应该创build一些活动领域,并在我的活动生活中使用这些领域。 并重写saveInstanseState保存新的字段,如果由于某种原因我的活动将被重新创build。 这是真的吗? Q3)基于以上事实,在onCreate()中,Android的世界中的每一个活动都需要像这样开始: if (savedInstanceState != null) { mType = savedInstanceState.getInt("some_val1"); mCardId = savedInstanceState.getLong("some_val2"); mQuery = savedInstanceState.getString("some_val3"); mCategory = savedInstanceState.getLong("some_val4");; } else { mType = getIntent().getExtras().getInt("some_val1"); mCardId = getIntent().getExtras().getLong("some_val2"); mQuery = getIntent().getExtras().getString("some_val3"); mCategory = getIntent().getExtras().getString("some_val4"); } Q4)假设onSaveInstanceState被调用并保存了与启动该活动的原始包(getIntent.getExtras)不同的值,如果再次重新创build活动,这是否意味着saveInstanceState与getIntent.getExtras()不同?现在是一样的吗? (如果它们是相同的,那么上面的代码中的if / else没有真正的含义,因为它是相同的!)。 Q5)如果我没有重写onSaveInstanceState,但是当我创build活动时,我把它传递给一个Bundle,这是否意味着如果活动再次被重新创build,我可以得到我的原始包? (我猜这个问题会根据其他答案自行回答)

是否可以禁止从父活动访问片段的布局(视图)?

我正在研究一个库,它将提供一些input字段的片段。 这些input字段将包含使用我的图书馆的应用程序不应该访问的用户的私人信息。 因此,edittexts或者我们可以说片段的布局不能从活动(findViewById,getChildAt ..)被连接到的地方访问。 对话框或其他活动的使用是不可接受的,这个片段应该被直接包含在活动的布局中。 这在Android中甚至可能吗? 我正在考虑dynamic地创build视图,并重写getChildAt等方法来阻止访问子视图,但在我开始“玩”这个问题之前,我宁愿在这里问一些意见。

我可以注册MVP Presenter里面的片段

我一直在关注Google提供的MVPdevise模式,以重构我的应用程序。 我有一个MainActivity和许多碎片,对于每个片段创build活动似乎都很麻烦,所以我一直在考虑在片段中注册演示者。 我看到的是每个片段都注册了它自己的主持人,但是我不确定它有多less错误… 🙂 所以这里是我的演示者: public class FirstPresenter implements FirstContract.Presenter { private final FirstContract.View mView; public FirstPresenter(FirstContract.View view) { mView = view; } @Override public void start() { Log.e(TAG, "Start"); } } 这是我的片段: public class FirstFragment extends Fragment implements FirstContract.View { private FirstContract.Presenter mPresenter; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container , Bundle savedInstanceState) […]

为什么android.app.Activity不是通过devise抽象的?

为什么android.app.Activity不是通过devise抽象,如果文档/教程说,至less它的方法onCreate() 必须实现。 从http://developer.android.com/guide/components/activities.html 你必须实现这个方法。 系统在创build活动时调用这个。 即使没有明确提到,没有实现没有意义的android.app.Activity对象,或? 我明白,parrent需要在自己的onCreate()实现中执行代码,但是当onCreate()会调用一个需要开发人员实现的抽象callback方法的时候,肯定会有devise。 这个devise的例子: public abstract class Activity { public abstract void implementThis(Object o); public void onCreate(Object o){ //Do stuff implementThis(o); //Do other stuff or end. } } 我在这里错过了什么? 为什么有非抽象的Activity如果开发人员必须和需要inheritance它并提供自定义的实现?

Android中的活动之间的inheritance

我无法将inheritance的概念应用于Android活动 – 例如。 ActivityA extends Activity , ActivityB extends ActivityA ,然后如果我使用ActivityB启动,则两个 Activities(A然后是B)的onCreate()方法被调用。 我的问题是,在典型的Java中,来自ActvityA的onCreate应该被覆盖 – 但是onCreate相当于作为构造函数行事,尽pipe它是一个函数。 Android中的inheritance是如何工作的, 与其他的function,如onPause(),onResume等? 编辑:我也注意到,ActivityA可能有许多抽象方法在其onCreate()中提供的定义在ActivityB中提供。 这个怎么用 ?

NavigationDrawer活动与片段callback和应用程序业务逻辑混杂在一起

一个包含NavigationDrawer的Activity应该可以玩弄它的片段。 我的问题是,抽屉必须在应用程序的所有可能的屏幕上可用,这使得我唯一的活动MainActivity非常混乱的片段callback代码和不同种类的导航/业务逻辑。 随着应用程序的增长,在整个活动中变得越来越难,我开始考虑可能的替代方法。 新方法必须保持原始的相同的视觉行为,并消除杂乱。 除了导航抽屉事件,还有多个片段也包含导航/业务逻辑,这也是由MainActivity处理的。 例如,一个片段可能包含3个或更多的button,可以启动其他片段或执行一些交叉关注的业务逻辑。 因此,由MainActivity实现的监听器接口的数量增长,并且这个时刻达到了20个。您可能会认为它看起来不舒服或感觉不舒服。 我想我可能会解耦多个NavigationDrawer活动,以减轻维护。 这意味着更大的资源消耗和轻微的视觉效果偏差,因为新的活动只有在抽屉closures之后才会启动,与原来的方法立即改变碎片相反。 你认为这是一个坏主意吗? 如何改进? 或者有更好的解决scheme? 谢谢。 UPD改进了描述。

从locking屏幕上的服务启动活动打开屏幕,但不显示活动本身

我试图从我已经获得锁的服务开始一个活动,如下所示: Intent i = new Intent(context, MyActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_USER_ACTION); startActivity(i); 活动清单声明如下: <activity android:name=".MyActivity" android:configChanges="orientation|screenSize|keyboardHidden|keyboard|navigation" android:excludeFromRecents="true" android:launchMode="singleInstance" android:screenOrientation="nosensor" android:showOnLockScreen="true" android:taskAffinity="" android:theme="@style/MyTheme" /> 最后, onCreate()或onAttachedToWindow() (我都尝试过),我添加以下标志: final Window win = getWindow(); win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON); 问题是,我第一次从我的服务调用startActivity() ,屏幕打开,但活动本身不显示。 它显示locking屏幕。 每一个随后的startActivity()调用都能正常工作,但是我找不到这种奇怪行为的原因。 我已经尝试了一些build议来获得完整的wakelock而不是部分的,根据下面的回答改变清单中的标志和值: 当屏幕被唤醒并且locking屏幕不被禁用时,Android活动不显示 BroadcastReceiver被调用时如何解锁屏幕? 以编程方式在Android中打开屏幕 Android Galaxy S4 – 在locking屏幕上可见的活动 请注意,我的主题不是对话框,而是全屏活动。 任何其他的想法?

为什么人们喜欢在Android中配对CLEAR_TOP和SINGLE_TOP

标志FLAG_ACTIVITY_CLEAR_TOP查找包含活动X的任务,并清除顶部以使X恢复到其恢复状态。 FLAG_ACTIVITY_SINGLE_TOP标志只会保留顶部的一个X实例。 因此,如果我已经使用了CLEAR_TOP ,我不需要包含SINGLE_TOP :这是因为CLEAR_TOP的行为包含了SINGLE_TOP的行为。 那么为什么有这么多的样本代码将这两个包含在一起? 是否因为这些开发人员不了解CLEAR_TOP的全部function? 再一次,几乎我在网上看到的每个例子都包括在一起。 为什么冗余? 例如,如果我在任务W->X->Y->Z上为X调用CLEAR_TOP ,那么我得到W->X 另一方面,如果我要在任务W->X->Y->Z上给X调用SINGLE_TOP,那么我将以W->X->Y->Z->X ,如果我打电话给它为ZI将得到W->X->Y->Z 所以真的CLEAR_TOP没有增加任何方程式:这就像添加0到其他值。