android中的根活动是什么?

时间:2017-09-26 22:35:41

标签: android android-intent

https://developer.android.com/guide/topics/manifest/activity-element.html

  

机器人:alwaysRetainTaskState

     

活动所在的任务的状态是否始终由系统维护 - " true"如果它会,并且"假"如果允许系统在某些情况下将任务重置为初始状态...... 此属性仅对任务的根活动有意义;所有其他活动都会被忽略。

那么root活动究竟意味着什么?

root活动是否意味着

"使用android.intent.action.MAINandroid.intent.category.LAUNCHER"定义的活动

或只是

"在这个确切的时刻发生在后堆栈底部的任何活动"

4 个答案:

答案 0 :(得分:2)

一般情况是,使用from pyspark.sql import functions as f cfg = SparkConf().setAppName('s') spark = SparkSession.builder.enableHiveSupport().config(conf=cfg).getOrCreate() spark.sparkContext.setLogLevel('WARN') # matching 'parent' row, saving current 'join result' to global result(df_result) # and return the row which maybe have 'child' row def join_again(i, x): global df_atom, df_result tmp = df_atom.join(x, on=[x['id'] == df_atom['parent_atom']], how='right').cache() # df.union is added since spark2.0, you can also use df.unionAll which is added in spark1.3 df_result = df_result.unionAll(tmp.select('id', 'parent', f.lit(i), 'order')) # they maybe have 'child' row and should participate in 'join_again' next time res = tmp.filter(tmp['parent_atom'].isNotNull()) \ .select(tmp['id'].alias('parent'), tmp['id_atom'].alias('id'), tmp['order']) tmp.unpersist() return res def join_cycle(y): # 'n' means how many times we execute func:'join_again' # and 'n' is also equal to data levels (e.g. 'there are 2 levels - 0, 1, 2') n = 1 while 1: if y.rdd.isEmpty(): break y = join_again(n, y) n += 1 if __name__ == '__main__': df = spark.createDataFrame([('222', None, '101'), ('111', None, '001'), ('333', None, '111'), ('444', None, '111'), ('555', None, '444'), ('666', None, '444')], schema=StructType([StructField('id', StringType()), StructField('order', StringType()), StructField('parent', StringType())])) df_atom = df.select(df['id'].alias('id_atom'), df['parent'].alias('parent_atom')).cache() df_result = spark.createDataFrame([], schema=StructType([StructField('id', StringType()), StructField('parent', StringType()), StructField('lv', StringType()), StructField('order', StringType())])) # find out the row which do not have 'child' row and they are level 0 df_init = df.join(df_atom, on=[df['parent'] == df_atom['id_atom']], how='left') \ .filter(df_atom['id_atom'].isNull()).cache() # we need to specify data level manually through func: pyspark.sql.functions.lit() df_result = df_result.unionAll(df_init.select('parent', 'parent', f.lit(0), 'order')) df = df_init.select('order', 'parent', 'id') df_init.unpersist() join_cycle(df) df_result.distinct().show(truncate=False) android.intent.action.MAIN定义的活动将是任务堆栈的根活动。

但是由于几乎没有意图标志,我们可以将任何活动作为根活动。 例如我在堆栈A-> B-> C中有三个活动,现在我想通过设置这些意图标志来启动活动D作为根活动 android.intent.category.LAUNCHER活动D将是根活动。

FLAG_ACTIVITY_CLEAR_TASK|FLAG_ACTIVITY_NEW_TASK: 如果在传递给Context.startActivity()的Intent中设置,则此标志将导致在活动开始之前清除与活动关联的任何现有任务。也就是说,活动成为否则为空任务的新根,并且任何旧活动都已完成。这只能与FLAG_ACTIVITY_NEW_TASK一起使用。

答案 1 :(得分:1)

我相信它位于后排的底部

答案 2 :(得分:0)

在启动应用程序时在android中主要或根活动是要执行的第一个活动。对于root活动,必须有android.intent.action.MAIN和android.intent.category.LAUNCHER intent过滤器。

答案 3 :(得分:0)

要基于Zohra的答案,可以在AndroidManifest.xml中更改MAIN和LAUNCHER活动。要将其应用于特定活动,请在意图过滤器之间定义它们,例如:

<activity android:name=".StartActivity">
     <intent-filter>
             <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
</activity>