当主题为Theme.NoDisplay时,活动未关闭

时间:2014-01-27 12:22:13

标签: android android-activity

我将活动主题设置为Theme.NoDisplay但是当它打开但按下按钮时活动未关闭/销毁。它应该在背压时关闭/销毁。

伙计们帮助我为什么会这样以及解决这个问题的任何解决方案。

public class MainActivity extends Activity {

    // Tag of the Activity
    private static String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DatabaseManager.init(this);

        NFCIItem mNFCItem = new NFCIItem();
        mNFCItem.setSerialNumber(1);

        DatabaseManager.getInstance().addWishList(mNFCItem);
        final List<NFCIItem> wishLists = DatabaseManager.getInstance().getAllNFCSerialNumber();
        Log.v(TAG, wishLists.toString());

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

的AndroidManifest.xml

<activity
    android:name="com.example.appdemo.MainActivity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoDisplay" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

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

3 个答案:

答案 0 :(得分:3)

我想它已经结束但你没有看到这个的证据,因为它是'NoDisplay'。使用此主题的Activity没有可见的UI(因此,这样的Activity处理UI事件不合逻辑)并且不应该保持活动状态。例如,请参阅此问题:

how to completely get rid of an activity's GUI (avoid a black screen)

如果您确实希望此Activity的布局可见并处理事件,则应使用其他主题。如果另一方面这是一个不可见的Activity,它只是进行一些后台处理,请在onCreate中调用finish()以在完成处理时关闭它。

答案 1 :(得分:-2)

您可以覆盖后退按钮事件以手动关闭活动

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        YourActivity.this.finish();

        return true;
    }
}

答案 2 :(得分:-3)

您可以覆盖后退按钮以启动主要活动,并立即关闭它而不需要动画。这将对用户显示为单个操作。

@Override
public void onBackPressed() {
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
    finish();
    overridePendingTransition(R.anim.slide_in_right,
            R.anim.slide_out_right);
}