以下是该方案:
用户使用活动#1来安排闹钟(使用android AlarmManager
服务),然后返回主屏幕。活动#1保持堆叠状态。
AlarmReciever
的{{1}}按计划调用:
onReceived()
活动#2(@Override
public void onReceive(Context context, Intent intent){
Intent intent = new Intent(context ,Activity2.class);
intent.setFlags(
Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_NO_HISTORY
);
context.startActivity(intent);
}
)成功启动。
Activity2
}
用户点击按钮(public class Activity2 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout_2);
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
WindowManager.LayoutParams.FLAG_FULLSCREEN
);
}
@Override
protected void onResume() {
super.onResume();
findViewById(R.id.dismiss_button).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
}
);
}
)至R.id.dismiss_button
活动#2。
请注意,除了为意图设置finish()
标志外,还在Intent.FLAG_ACTIVITY_NO_HISTORY
中指定了标志(我也尝试了每个标志):
AndroidManifest.xml
此外,标志 <activity
android:name=".Activity2"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden"
android:launchMode= "singleInstance"
android:noHistory="true"
>
</activity>
是必需的,因为活动#2是从Intent.FLAG_ACTIVITY_NEW_TASK
而非其他活动开始的。
答案 0 :(得分:0)
一旦Activity
不再可见,NO_HISTORY标志只会阻止此Activity
出现在任务堆栈中。在您的情况下,如果您在显示Activity2
时按住HOME,您会看到Android立即在该活动上调用finish()
和onDestroy()
(这不是通常的行为时任务被放入后台)。
要做你想做的事,你需要添加
android:excludeFromRecents="true"
到Activity
的清单条目。这告诉Android不要将你的任务放在最近的任务列表中。