如何在没有 UI 的情况下启动活动?

有没有可能在没有 UI 的情况下从主函数启动一个活动?也就是说,有没有一种方法可以创建一种包装另一个活动的“包装器”,也就是说,通过启动主活动,它会自动将您带到另一个活动。

如果不可能,是否有办法从堆栈中删除主活动,以便单击后退按钮不会将您带到一个空白 UI? 下面是我正在尝试做的一个例子:

public class WrapperActivity extends Activity {


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:555-1212"));
startActivity(intent);
}
}
95821 次浏览

你需要添加意图标志,

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

或者

发射意图后呼叫“ finish();”。

在清单中,当您声明活动时,使用主题 "@android:style/Theme.Translucent.NoTitleBar"

例如:

<activity android:name="yourActivityName" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar">

吸毒

<activity android:name="yourActivityName" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar">

布莱恩515提到的工程伟大。此方法对于创建入口点 Activity 非常有用,它决定调用、启动、服务等哪些活动,而不必向用户显示 UI。记住在你开始你的意图之后使用 finish()

Android 还为此提供了一个专门的主题:

android:theme="@android:style/Theme.NoDisplay"

看起来类似于这里提出的问题: 从历史堆栈中移除活动

如果是,你可以使用:

活动 _ NO _ 历史

这应该可以从堆栈中清除活动。

如果你需要从最近的应用程序中排除(长按主键) ,你可以使用这个标志:

FLAG _ Activity _ EXCLUDE _ FROM _ RECENT

如果您没有与 UI 交互,那么您正在尝试做的事情听起来更像是一个 android 服务。

我在 onResume()中使用 moveTaskToBack(true)将整个活动堆栈放在后台。

我想这会对你有很大帮助:

<activity  android:name = "MyActivity"
android:label = "@string/app_name"
android:theme = "@android:style/Theme.NoDisplay" >

在您的清单中添加 @android:style/Theme.Translucent.NoTitleBar",正如上面提到的一些答案。

还要从 activity.java 文件中删除 setContentView(R.layout.your_activity);行。

如果您使用的是 Android 6.0 + 或 Target SDK 是23 + ,那么使用主题 android:theme = "@android:style/Theme.NoDisplay"将导致错误 did not call finish() prior to onResume() completing的崩溃。这实际上是谷歌开发人员 给你发现的一个 bug。

因此,建议使用带有以下主题的活动作为解决方案。

android:theme = "@android:style/Theme.Translucent.NoTitleBar"

我正在使用 AppCompatActivity和解决方案中提供的这样没有解决我的问题。以下是对我有效的方法。

我在我的 styles.xml中添加了以下内容。

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
</style>


<style name="AppTheme.NoDisplay">
<item name="android:windowBackground">@null</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowDisablePreview">true</item>
<item name="android:windowNoDisplay">true</item>
</style>

然后,对于任何我想要禁用显示的活动,我修改如下:

<activity
android:name=".NoDisplayActivity"
android:theme="@style/AppTheme.NoDisplay">

干杯!