如何在MainActivity之前启动Java类

时间:2018-07-14 12:25:53

标签: java android

我正在创建一个需要在运行和启动Main Activity之前运行Java类的项目。我的Java类是:Bluetooth.java,register.java,DatabaseHelper.java。我需要运行的程序顺序:蓝牙>注册> MainActivity。 MainActivity是唯一具有布局的Activity。我已经做了什么:

  1. 我删除了蓝牙中的setContentView并注册,因为它们没有布局。
  2. 我习惯于将一个活动引用到另一个活动。蓝牙进行注册,然后注册到MainActivity
  3. 我更改了AndroidManifest 这是代码:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.windows8.registerlogin">
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    
    <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".Bluetooth" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
    
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".Register"
        android:label="@string/app_name"/>
    <activity android:name=".MainActivity"
        android:label="@string/app_name"/>
    </application>
    </manifest>
    

    启动程序后,它突然关闭,然后我才能执行任何操作。 你能告诉我程序有什么问题吗?还是我遗漏了一些东西?谢谢。 (看来我无法在此处发布我的logcat)

4 个答案:

答案 0 :(得分:0)

onCreate的{​​{1}}中执行以下操作:

Bluetooth

在register.java中使用类似的代码。

这是您确切问题的解决方案。但是,这不是理想的做事方式。

答案 1 :(得分:0)

使用启动器活动是个好主意,但请确保不要通过初始化onCreate中的内容或将上下文泄漏给匿名AsyncTask来锁定UI线程。 根据您的描述,蓝牙和注册无需进行任何活动。假设这是正确的,并且您可以使它们成为独立的类,那么下面是一个看起来类似的示例:

private AsyncTask<Void, Void, Integer> loader = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.launcher_activity);
    loader = new LoadStuff(this);
    loader.execute();
}

@Override
public void onDestroy() {
    super.onDestroy();
    if( loader != null ) {
        loader.cancel(true);
        loader = null;
    }
}

static class LoadStuff extends AsyncTask<Void, Void, Integer> {

    WeakReferences<Activity> context;

    LoadStuff(Activity context) {
        this.context = new WeakReference<>(context);
    }

    @Override
    protected void onPreExecute() {
    }

    @Override
    protected Integer doInBackground(Void... params) {
        // assuming they're singletons
        Bluetooth.initialize();
        Register.initialize();
        return 0; // or pass an error code if these fail
    }

    @Override
    protected void onPostExecute(Integer result) {
        Activity c = context.get();
        if( c != null ) {
            Intent intent = new Intent(c, MainActivity.class);
            c.startActivity(intent);
            c.finish(); // don't let the user come back to this screen
        }
    }
}

答案 2 :(得分:0)

从应用程序类调用蓝牙类。像这样

public class AppTest extends Application {

@Override
public void onCreate() {
    super.onCreate();
   //Call your bluetooth class
}
}

并在androidmanifest文件中添加您的应用程序类名称:

<application
    android:name=".AppTest">

答案 3 :(得分:-1)

您应该发布收到的错误,但我会为您提供最可能的解决方案。 您的应用可能崩溃,因为类Bluetooth没有扩展活动,但被标记为活动。

创建一个启动器活动,该活动将具有一个加载屏幕,仅用于向您的用户显示该应用程序正在运行。因为它将是第一个活动,所以它可以调用所需的类,然后才可以启动主要活动。

因此onCreate()方法将如下所示。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.launcher_activity);

    new Bluetooth();
    new Register();

    startActivity(new Intent(this, MainActivity.class));
}