如何将Android应用程序在后台运行到前台

时间:2012-10-11 11:13:34

标签: android android-activity

以下是该方案:

AndroidManifest.xml使用android:launchMode="singleTask"定义单个活动。 (这意味着在整个应用程序生命周期中堆栈中应该有一个活动,对吗?)

Activity.onCreate()期间,以编程方式创建广播接收器并侦听发送短信。即使在设计Activity.onPause() 之后,接收器仍然有效。

当用户完成应用程序后,他按下设备主页按钮,该按钮调用Activity.onPause()并且应用程序消失。然后设备显示Android主屏幕。

收到短信后,广播接收器会收到短信并尝试通过以下方式显示活动:

Intent it = new Intent(context, Akami.class);
it.setAction(Intent.ACTION_MAIN);
it.addCategory(Intent.CATEGORY_LAUNCHER);
it.setComponent(new ComponentName(context.getPackageName(), "MyActivity"));
it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(it);

但是,该活动不会显示给用户。

  • a)为什么?
  • b)将Activty带到前台的可能方法是什么?

2 个答案:

答案 0 :(得分:18)

MyMainActivity定义(AndroidManifest.xml)中:

<intent-filter>
 <action android:name="intent.my.action" />
 <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

以编程方式将应用程序带到前台:

Intent it = new Intent("intent.my.action");
it.setComponent(new ComponentName(context.getPackageName(), MyMainActivity.class.getName()));
it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.getApplicationContext().startActivity(it);

注意:当context.startActivity(it)对象与想要提出的活动相同时,context将无效。

答案 1 :(得分:1)

是的,你所说的是正确的,有一个BroadcastReciever并向你的Activity发出一个意图将它带到前台。但是关于活动生命周期的注意事项。

Android操作系统可以根据系统资源将您的活动从onPause()转移到onStop()和onDestroy()。所以在这种情况下,你的调用Activity会再次重启,所以在那里采取预防措施。否则,很容易遇到NullPointerExceptions