アルファケンタウリ:
私はスタート(テント)でテントを使用して、スレッドによって制御異なった事をやりたいです。私は「startActivity」を使用する主なコンテキストを必要と知っているが、どのように私は別々のスレッドからこれを管理するのですか?それはハンドラか何かを使用して、メインスレッドに「startActivity」をリンクすることはできますか?
使用例:
Public Classic mThread implements Runnable{
@override
Public void Run()
{
If (true) //something is true
{
Intent intent = new Intent (Bluetoothadapter.Enable()):
startActivity(Intent):
}
If(true) //Something else is true
{
Intent intent = new Intent (MainActivity, esp.class);
startActivity (intent)
}
}
}
更新
これは私が問題を抱えているコードです:
public class cBT_startcheck extends MainActivity implements Runnable {
private int iCurrent_BT_state = mBluetoothAdapter.getState();
@Override
public void run() {
if (mBluetoothAdapter == null) {
cGlobal_values.bBT_NOADAPTER =true;
}else if (mBluetoothAdapter != null)
{
cGlobal_values.bBT_NOADAPTER =false;
switch (iCurrent_BT_state)
{
case BluetoothAdapter.STATE_ON:
cGlobal_values.bBT_GenState_on=true;
break;
case BluetoothAdapter.STATE_OFF:
cGlobal_values.bBT_GenState_on =false;
break;
}
if (!mBluetoothAdapter.isEnabled()){
Log.d("HALLO", "run: ");
//Intent intBT_start = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
//mainContext.startActivity(intBT_start);
vStart_BT();
}
}
}
}
MainActivity
これは私がMainActivityで作られたものです
public class MainActivity extends AppCompatActivity {
public Handler mainHandler = new Handler(Looper.getMainLooper());
public void vStart_BT()
{
mainHandler.post(new Runnable() {
@Override
public void run() {
Intent intBT_start = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(intBT_start);
}
});
}
}
質問
どのように私は区切らクラスで書かれsecoundスレッドからいくつかのインテントを実行することができますか?
このアイデア自体は適切ではない場合:
私は「スター活性」を使用して、メインスレッドへの意思を渡す方法がわかりません。
アルファケンタウリ:
ソリューションは、弱い参照<>であります
新しいスレッドでは、次を実装する必要があります。
public class cBT_startcheck extends MainActivity implements Runnable {
private WeakReference<MainActivity> activityWeakReference;
cBT_startcheck(MainActivity activity){
activityWeakReference =new WeakReference<MainActivity>(activity);
}
@Override
public void run() {
final MainActivity activity =activityWeakReference.get();
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
activity.startAplication(intent)
}
}
MainActivity onCreat
Runnable rcBT_startcheck = new cBT_startcheck(this);
new Thread(rcBT_startcheck).start();