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

是否有可能在没有UI的情况下从主函数启动一个活动? 即是否有办法在另一个活动周围创build一种“包装”,即通过启动主要活动,它自动将您带到另一个活动。

如果这是不可能的,有没有办法从堆栈中删除主要活动,以便单击后退button不会带你到一个空白的用户界面? 以下是我想要做的一个例子:

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); } } 

您需要添加意图标志,

 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

要么

调用“ finish(); ”后发射意图。

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

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

在你的清单中,当你声明活动时,使用主题"@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"> 

由Brian515提到的作品很棒。 此方法对创build入口点活动非常有用,该入口点活动决定要调用哪个活动,启动,服务等,而不必向用户显示UI。 记住在开始你的意图之后使用finish()

我认为这会帮助你很多:

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

如果你使用的是Android 6.0+或者Target SDK是23+,那么有一个主题android:theme = "@android:style/Theme.NoDisplay"会导致崩溃,错误did not call finish() prior to onResume() completing 。 这实际上是Google开发者在这里认可的一个错误。

所以build议使用以下主题的活动作为解决方法。

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

看起来类似于这里问的问题: 从历史堆栈中删除一个活动

如果是,那么你可以使用:

FLAG_ACTIVITY_NO_HISTORY

这应该起作用来清除堆栈中的活动。

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

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

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

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

另外删除setContentView(R.layout.your_activity); 来自你的activity.java文件。

如果你没有和UI进行交互,你试图做的听起来更像是一个android服务。