サービスから起動されたアクティビティを作成しようとしています。サービスの可視性から開始されたアクティビティnull
私の問題はこの活動を隠している/表示しています。
活動はそれほど
overlay = new BubbleOverlay();
Intent intent = new Intent(this, overlay.getClass()).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
活動のように開始された:私はサービスからMAINVIEWの表示を切り替えるしようとしています
public class BubbleOverlay extends Activity {
private boolean active = false;
private View mainView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.overlay_layout);
mainView = findViewById(R.id.main_overlay_layout);
if(mainView == null)
Log.d("BubbleOverlay", "onCreate: MainView is null");
}
public void setActive(boolean value){
active = value;
}
public void hide(){
active = false;
mainView.setVisibility(View.INVISIBLE);
}
public void show(){
active = true;
mainView.setVisibility(View.VISIBLE);
}
。
Handler handler = new Handler();
Runnable runnable_longClick = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
overlay.hide();
}
};
handler.postDelayed(runnable_longClick, 5000);
これは次のエラーを生成します。あなたはNull Pointer Exception
を取得している
07-28 05:51:56.549 21690-21690/com.derp.derp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.derp.derp, PID: 21690
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setVisibility(int)' on a null object reference
at com.derp.derp.BubbleOverlay.hide(BubbleOverlay.java:37)
at com.derp.derp.BubbleService$4.run(BubbleService.java:181)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6044)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
これはどんなアクティビティでも機能しますか?それとも、サービスを開始したアクティビティにバインドされていなければなりませんか? – Maclaren
任意のアクティビティをサービスにバインドできます。アクティビティを使わずにバックグラウンドで実行するサービスが必要な場合や、アクティビティの切り替え中にバックグラウンドで継続して実行する必要がある場合は、まずサービスを開始する必要があります。その後、必要なアクティビティにサービスをバインドすることができます。 –
このテクニック(上記のコメントで説明したテクニック)は、両方のテクニックの組み合わせです。1.開始サービスと2.バインドサービス –